国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

linux c之用命名管道實現進程通信

2019-11-08 20:14:14
字體:
來源:轉載
供稿:網友

1、命名管道相關信息介紹

不是很了解命名管道先看這個篇博客 http://blog.csdn.net/u011068702/article/details/55102379 linux c之命名管道簡單使用

博客介紹了創建管道的方法,這里還需要介紹 open函數和調用阻塞

FIFO文件也可以使用open調用來打開,mkfifo函數只是創建一個FIFO文件,要使用命名管道還是將其打開。但是有兩點要注意,

1、就是程序不能以O_RDWR模式打開FIFO文件進行讀寫操作,因為如一個管道以讀/寫方式打開,進程就會讀回自己的輸出,同時我們通常使用FIFO只是為了單向  的數據傳遞,要注意是O_REWR,不是O_WRONLY2、就是傳遞給open調用的是FIFO的路徑名,而不是正常的文件。

open API

    open(const char *path, O_RDONLY);//1      open(const char *path, O_RDONLY | O_NONBLOCK);//2      open(const char *path, O_WRONLY);//3      open(const char *path, O_WRONLY | O_NONBLOCK);//4  

open調用的阻塞

open函數第二個參數中,選項O_NONBLOCK表示非阻塞,加上這個選項后,表示open調用是非阻塞的,如果沒有這個選項,則表示open調用是阻塞的。open調用的阻塞到底是什么意思?很簡單,對于以只讀方式(O_RDONLY)打開的FIFO文件,如果open調用是阻塞的(即第二個參數為O_RDONLY),除非有一個進程以寫方式打開同一個FIFO,否則它不會返回;如果open調用是非阻塞的的(即第二個參數為O_RDONLY | O_NONBLOCK),則即使沒有其他進程以寫方式打開同一個FIFO文件,open調用將成功并立即返回。對于以只寫方式(O_WRONLY)打開的FIFO文件,如果open調用是阻塞的(即第二個參數為O_WRONLY),open調用將被阻塞,直到有一個進程以只讀方式打開同一個FIFO文件為止;如果open調用是非阻塞的(即第二個參數為O_WRONLY | O_NONBLOCK),open總會立即返回,但如果沒有其他進程以只讀方式打開同一個FIFO文件,open調用將返回-1,并且FIFO也不會被打開。

2、實現進程通信代碼

  實現功能:我們這里有兩個源文件,一個源文件pipe11.c負責從Data.txt里面讀入數據,然后寫入管道,然后pipe12.c源文件是從管道如入數據,然后把讀到的數據寫入write.txt里面去

在pipe11.c的源文件如下

記得加上頭文件

#include<unistd.h>#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<stdlib.h>#include<limits.h>#include<string.h>#include<fcntl.h>然后就是pipe12.c的代碼如下

3、運行結果展示

沒有運行之前看下  Data.txt內容為: this is first pipe, I am name is chenyu!然后是沒有創建write.txt文件的

然后我們運行pipe11.c文件效果如下

我么可以看到阻塞了

然后我們運行pipe12.c文件效果如下

然后再去看運行pipe11.c的控制臺

我么可以看到沒有阻塞了,希望可以更好理解阻塞

我們再去看write.txt文件


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巢湖市| 陈巴尔虎旗| 博湖县| 榆林市| 永吉县| 宣化县| 定边县| 涪陵区| 新营市| 兴隆县| 环江| 天祝| 张北县| 龙山县| 项城市| 莆田市| 上饶市| 西乌珠穆沁旗| 平阴县| 突泉县| 江川县| 延寿县| 和平区| 泰和县| 镇原县| 武强县| 乳山市| 宜宾市| 佛山市| 区。| 罗城| 大渡口区| 泸水县| 勐海县| 长顺县| 赤壁市| 麻栗坡县| 本溪市| 平乐县| 大同县| 来安县|