色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網>,專注嵌入式工程師培養15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 命名管道的簡單使用
命名管道的簡單使用
時間:2017-01-05作者:華清遠見

區別于無名管道,命名管道可以用于沒有親緣關系的進程之間進行通信,且命名管道在一些特點上更類似于文件,其具有文件名,文件屬性及存放路徑等信息,也就是說利用命名管道進行操作后,我們可以在相應的路徑下查找到它,更方便編程的需要和操作,且命名管道嚴格地遵循先進先出原則。

命名管道在創建成功后,就可以與普通文件的開發設置一樣了,下面通過一個例子我們來說明一下命名管道的使用及注意事項,假設情境:我們需要兩個進程進行數據的交換,那么創建命名管道后,一個進程負責向管道內寫入數據,另一個進程負責由管道讀出數據。代碼段如下:

//寫端代碼
        #include <stdio.h>
        #include <stdlib.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <fcntl.h>

int main()
        {
                int ret;
                int fd;

                ret=mkfifo("fifo",0644);        //創建命名管道
                if(ret<0)                                //管道是否創建成功,不成功則退出程序
                {
                        perror("fifo error\n"); 
                        exit(-1);
                }

                fd = open("fifo",O_WRONLY);        //打開管道文件
                if(fd<0)                                        //打開是否成功,不成功則退出程序
                {
                        perror("open error\n");
                        exit(-1);
                }

        write(fd,"hello",6);                //進行寫端操作
                close(fd);
                unlink("fifo");                        //刪除命名管道 *
                return 0;
        }

//讀端代碼
        #include <stdio.h>
        #include <stdlib.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <fcntl.h>

int main()
        {
                int fd;
                char str[20];

                fd = open("fifo",O_RDONLY);                //打開管道文件
                if(fd<0)                                                //打開是否成功,不成功則退出
                {
                        perror("open error\n");
                        exit(-1);
                }

        read(fd,str,sizeof(str));                 //進行讀取操作
                printf("%s\n",str);                        //將讀取到的數據進行打印輸出
                close(fd);
                return 0;
        }

上述兩個程序分別編譯鏈接成可執行程序,且同時運行于2個終端上,進行執行效果的觀察。

命名管道在使用時,需要尤其注意以下3點,大家可以對照上面的程序段體會:

1、管道創建成功后,可以像操作普通文件一樣進行操作,但是,兩個進程打開一個命名管道的時候,必須分別以”只“的方式打開,且必須相反,即一個進程以只讀方式打開,另一進程以只寫方式打開。

2、在終端上單獨運行寫端程序時,會發現,終端無任何反應,而讀端程序一旦開始運行,則兩個程序同時結束,說明命名管道只打開一端的話是無法成功的,此時open是無法正常返回的,也就是說管道兩端需要同時打開,這也是命名管道的一個特點。

3、寫端代碼中標記為“*”的語句作用為刪除命名管道,可將該句暫時注釋掉,則在程序結束后,可在當前路徑下可以找到一個名為“fifo”的文件,且其文件屬性為“p”,為管道類型文件,這也是區別于無名管道的一大特點,使用結束后可以找到具體文件,所以命名管道是可以應用于無親緣關系的進程間的。

另外,在創建管道的時候,如果指定路徑下存在一個與命名管道同名的文件,則編譯器提示命名管道未創建成功,為避免后期使用出現問題,通常在使用命名管道后予以刪除操作。

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 免费h网站在线观看的 | 亚洲综合AV一区二区三区不卡 | 亚洲伊人久久精品酒店 | HEYZO中文字幕无码 | 欧美性猛交久久久乱大交 | 娇喘抽搐高潮喷水A片免费观看 | 亚洲尤码不卡AV麻豆 | 午夜无码无遮挡在线视频 | 麻豆蜜桃在线观看 | 亚洲精品又粗又大又爽a片 夜夜爽妓女8888视频免费观看 | 日本午夜成年在线网站 | 日韩福利片午夜免费观着 | 国产免费1卡2卡 | 狠狠色丁香婷婷 | 日韩精品无码一区二区三区不卡 | 粉嫩粉嫩的18在线观看 | 日韩精品黄色片 | 大地资源中文二页在线观看 | 美女胸又www又黄的网站 | 国产精品18久久久久久欧美网址 | 久久人| 高清萌白酱国产福利甜味弥漫 | 高清国产AV一区二区三区 | 亚洲无人区一码二码三码区别 | 无码AV天堂一区二区三区 | 少妇AB又爽又紧无码网站 | 国产精品嫩草影院一二三区入口 | 18禁止进入黄大全在线 | 中文字幕一区二区三区5566 | 欧美人与性囗牲恔配视频0 裸体美女扒开下部无遮挡网站免费 | 人妻中文字幕AV无码专区 | 久久久久AV无码免费网 | 99热门精品一区二区三区无码 | 亚洲AV成人精品日韩一区 | 久久精品aⅴ无码中文字字幕不卡 | 麻花传媒沈芯语老师家访 | 轻点好疼好大好爽视频 | 午夜性又黄又爽免费看尤物 | 婷婷九九 | 色偷偷久久一区二区三区 | 79年熟女大胆露脸啪啪对白P |