日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

进程间通信--命名管道

發布時間:2023/11/27 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程间通信--命名管道 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

幾個術語

  • 二義性:當我們往一個管道里面寫端寫數據的時候,比如寫一個hello的時候,當我們寫到he的時候,讀端就已經開始讀取數據了,所以這是不對的,這就是二義性
  • 臨界資源:多個流可以訪問的一個共同的存儲資源
  • 臨界區:訪問臨界資源的代碼叫做臨界區
  • 互斥:任一時候只能有一個進程利用臨界資源訪問臨界區,并且是以原子性訪問
  • 原子性:要么訪問,要么沒有訪問,不存在正在訪問的情況
  • 饑餓問題:一個進程因為級別低,在某些場景之下要求訪問某一資源的時候一直訪問不了,這就出現了饑餓問題
  • 同步:按照某一順序訪問臨界資源

命名管道

命名管道的概念

匿名管道(pipe)的一個不足之處就是,匿名管道只能用于具有血緣關系的進程之間的通信,但是進程間通信的時候有很多時候都不是具有血緣關系的,這個時候就需要其他的一些通信方式,然后就有了命名管道。 命名管道通過一個路徑將各個進程相連,只要一個進程能夠訪問某一個路徑就能夠訪問這個管道了

命名管道的創建和讀寫

在shell下面我們可以使用mknod和mkfifo來創建管道

這里我們經常使用的是mkfifo,所以只是簡單的介紹一個mkfifo,另一個就不做詳細的介紹了
我們在shell下可以使用mkfifo myfifo.pipe來創建一個命名管道,然后在記住他的路徑,在使用的時候,我們可以直接通過open來打開一個管道進行讀寫的 操作

下面的是程序中使用的mkfifo函數,先看接口原型

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *filename, mode_t mode);

解釋一些返回值和參數,創建成功返回0,失敗返回-1。
參數中const char *filename,就是一個路徑加上文件名的形式,mode_t mode是我們創建的這個管道的操作權限,我們可以是設置為0666 | S_IFIFO,如下的使用方式,其中的S_IFIFO是一個固定的操作命名管道的一種方式,這里先不用管   

我們在函數中可以按照如下的使用

if(fifo("./pipe",0666 | S_IFIFO) < 0)
{printf("fifo error");return 1;
}

下面我們通過一個簡單的程序實現一個寫端,一個讀端的操作,這個時候我們可以打開兩個終端,分別運行下面的程序,就會實現進程間通信,一個寫,一個讀

寫 端

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>#define _PATH_ "/home/xiaoxu/code/fifo/log.pipe"int main()
{umask(0);if(mkfifo(_PATH_,0666|S_IFIFO) < 0 ){printf("fifo error\n");return 1;}int fd = open(_PATH_,O_WRONLY);if(fd <= 0){printf("open error\n");return 1;}else{char buf[100];memset(buf,'\0',sizeof(buf));while(1){scanf("%s",&buf);int wr = write(fd,buf,sizeof(buf));if(wr <= 0){printf("write error\n");break;}}}close(fd);return 0;
}

讀端

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>#define _PATH_ "/home/xiaoxu/code/fifo/log.pipe"int main()
{int fd = open(_PATH_,O_RDONLY);   //只讀方式打開一個管道if(fd < 0)    //打開管道失敗{printf("read error\n");return 1;}else   //打開管道成功{char buf[100];memset(buf,'\0',sizeof(buf));while(1){int red = read(fd,buf,sizeof(buf));  //把管道里面的內容讀取到buf中,所以上面應該加上memset這個函數,對buf進行初始化if(red <= 0)   //{printf("read error\n");break;}printf("%s\n",buf);}close(fd);}return 0;
}

總結

以上是生活随笔為你收集整理的进程间通信--命名管道的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品成人无码熟妇在线 | 天天干中文字幕 | 欧美在线另类 | 成人性生活免费看 | 久久久欧洲 | 日韩和欧美的一区二区 | 秘密基地动漫在线观看免费 | 少妇黄色片| 午夜精品福利电影 | 都市豪门艳霸淫美妇 | 日韩精品人妻一区二区中文字幕 | 色碰视频 | 亚洲国产日韩一区无码精品久久久 | 老司机深夜福利视频 | 欧美日韩国产一区二区在线观看 | 校园春色亚洲激情 | 天天干夜夜添 | 欧美一级片网址 | 国产精品18久久久 | 重口味av | 中文字幕在线观看一区二区 | 欧美一区二区三区在线观看视频 | 亚洲女女做受ⅹxx高潮 | av在线入口 | 极品人妻一区二区三区 | 一级片美女 | 日本久久网站 | 日本不卡123| 国产r级在线观看 | 久草成人在线 | 日韩av一区二区三区在线 | 在线看一级片 | 自拍偷拍日韩精品 | 国产精品zjzjzj在线观看 | 中文字幕在线观 | 色婷婷av一区二区三区麻豆综合 | 在线观看毛片网站 | 国产嫩bbwbbw高潮 | 夜夜天天拍拍 | 91av视频在线播放 | 亚洲综合区| 精品成人一区二区三区久久精品 | 神马午夜一区 | 韩国成人在线视频 | 久久精品黄aa片一区二区三区 | 狠狠操网| 日本一区二区黄色 | 在线不卡中文字幕 | 一个人看的www视频在线观看 | 无码精品人妻一区二区三区湄公河 | 国产手机看片 | 久久精彩视频 | 国产人妻精品一区二区三区不卡 | 国产精品欧美大片 | 就要操就要射 | 久草视频资源 | 久久久精品视频在线观看 | 国产熟妇一区二区三区四区 | 亚洲成人www | 在线波多野结衣 | 无码人妻aⅴ一区二区三区有奶水 | 国产又色又爽又黄 | 羞辱极度绿帽vk | 欧美精彩视频 | 久久久久a | 蜜桃免费在线视频 | 在线免费一级片 | av最新网址| 二区视频在线 | 女人高潮特级毛片 | 亚洲男人天堂影院 | 朴麦妮原版视频高清资源 | 在线黄网 | 国产草草影院ccyycom | 色多多黄色 | 精品国产人妻一区二区三区 | 国产一区二区三区四 | 91精品久久人妻一区二区夜夜夜 | 亚洲精品美女 | 狠狠狠狠狠干 | 献给魔王伊伏洛基亚吧动漫在线观看 | 91av高清| 精品一区二区无码 | 亚洲av成人无码网天堂 | 日日干日日摸 | 国产精品主播一区二区 | 亚洲国产黄色av | 假日游船法国满天星 | 国产人成一区二区三区影院 | 久久国产福利 | 亚洲视频一区二区三区四区 | 国产xxx在线| 久久精品这里 | 亚洲一区二区欧美 | 69re视频| 国产精品日韩精品欧美精品 | 男人插女人免费视频 | 国产一级片在线 | 精射女上司 |