久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

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

區別于無(wu)名(ming)管(guan)道,命名(ming)管(guan)道可以(yi)用(yong)于沒(mei)有(you)親緣關系的進(jin)程之間進(jin)行通信,且命名(ming)管(guan)道在(zai)一些特(te)點上更(geng)(geng)類似于文件(jian),其具有(you)文件(jian)名(ming),文件(jian)屬(shu)性及存放路徑(jing)等信息,也就(jiu)是說利用(yong)命名(ming)管(guan)道進(jin)行操作后,我(wo)們可以(yi)在(zai)相應的路徑(jing)下查找到它,更(geng)(geng)方便編程的需要和操作,且命名(ming)管(guan)道嚴格地(di)遵循先進(jin)先出(chu)原(yuan)則(ze)。

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

//寫端代碼
        #include <stdio.h>
        #include <stdlib.h>
        #include <sys/types.h>
        #include <sys/stat.h>
      &nbsp; #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;
     &nbsp;  }

//讀端代碼
        #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);
     &nbsp;   &nbsp;      }

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

上述兩個程序分別編(bian)譯(yi)鏈接成可執行程序,且同(tong)時(shi)運行于2個終端(duan)上,進(jin)行執行效果的(de)觀察。

命(ming)名管道在(zai)使(shi)用時,需要尤(you)其注意以下(xia)3點,大家(jia)可以對照(zhao)上面的(de)程(cheng)序段體會:

1、管道(dao)創(chuang)建成功后,可以(yi)(yi)(yi)像操作普通(tong)文件一(yi)樣進(jin)行操作,但是,兩個(ge)進(jin)程打開一(yi)個(ge)命名管道(dao)的時候(hou),必須(xu)分別以(yi)(yi)(yi)”只(zhi)&ldquo;的方式打開,且必須(xu)相反,即一(yi)個(ge)進(jin)程以(yi)(yi)(yi)只(zhi)讀方式打開,另一(yi)進(jin)程以(yi)(yi)(yi)只(zhi)寫(xie)方式打開。

2、在終端(duan)(duan)上單獨運(yun)行寫(xie)端(duan)(duan)程序(xu)(xu)時,會發現,終端(duan)(duan)無(wu)任何反應(ying),而讀端(duan)(duan)程序(xu)(xu)一旦開始運(yun)行,則兩(liang)個程序(xu)(xu)同(tong)時結束(shu),說明命名管(guan)道只打開一端(duan)(duan)的(de)話是(shi)無(wu)法成功的(de),此時open是(shi)無(wu)法正常(chang)返回(hui)的(de),也就是(shi)說管(guan)道兩(liang)端(duan)(duan)需要同(tong)時打開,這也是(shi)命名管(guan)道的(de)一個特點。

 3、寫(xie)端(duan)代碼中標記為(wei)“*”的(de)語句(ju)作用(yong)為(wei)刪(shan)除命名(ming)(ming)管(guan)道(dao),可將該句(ju)暫時注釋(shi)掉,則在程序結束后,可在當(dang)前路徑下可以(yi)(yi)找(zhao)到一個名(ming)(ming)為(wei)“fifo”的(de)文(wen)(wen)件,且其文(wen)(wen)件屬性為(wei)“p”,為(wei)管(guan)道(dao)類型文(wen)(wen)件,這也(ye)是區別于無名(ming)(ming)管(guan)道(dao)的(de)一大特(te)點(dian),使用(yong)結束后可以(yi)(yi)找(zhao)到具(ju)體文(wen)(wen)件,所(suo)以(yi)(yi)命名(ming)(ming)管(guan)道(dao)是可以(yi)(yi)應用(yong)于無親緣關系的(de)進程間的(de)。

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

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)