<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          進(jìn)程間通信之:管道

          作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/257127.htm

          3.使用實(shí)例

          下面的實(shí)例包含了兩個(gè)程序,一個(gè)用于讀,另一個(gè)用于寫(xiě)。其中在讀的程序里創(chuàng)建管道,并且作為main()函數(shù)里的參數(shù)由用戶輸入要寫(xiě)入的內(nèi)容。讀管道的程序會(huì)讀出用戶寫(xiě)入到管道的內(nèi)容,這兩個(gè)程序采用的是阻塞式讀寫(xiě)管道模式。

          以下是寫(xiě)管道的程序:

          /*fifo_write.c*/

          #includesys/types.h>

          #includesys/stat.h>

          #includeerrno.h>

          #includefcntl.h>

          #includestdio.h>

          #includestdlib.h>

          #includelimits.h>

          #defineMYFIFO/tmp/myfifo/*有名管道文件名*/

          #defineMAX_BUFFER_SIZEPIPE_BUF/*定義在于limits.h中*/

          intmain(intargc,char*argv[])/*參數(shù)為即將寫(xiě)入的字符串*/

          {

          intfd;

          charbuff[MAX_BUFFER_SIZE];

          intnwrite;

          if(argc=1)

          {

          printf(Usage:./fifo_writestringn);

          exit(1);

          }

          sscanf(argv[1],%s,buff);

          /*以只寫(xiě)阻塞方式打開(kāi)FIFO管道*/

          fd=open(MYFIFO,O_WRONLY);

          if(fd==-1)

          {

          printf(Openfifofileerrorn);

          exit(1);

          }

          /*向管道中寫(xiě)入字符串*/

          if((nwrite=write(fd,buff,MAX_BUFFER_SIZE))>0)

          {

          printf(Write'%s'toFIFOn,buff);

          }

          close(fd);

          exit(0);

          }

          以下是讀管道程序:

          /*fifo_read.c*/

          (頭文件和宏定義同fifo_write.c)

          intmain()

          {

          charbuff[MAX_BUFFER_SIZE];

          intfd;

          intnread;

          /*判斷有名管道是否已存在,若尚未創(chuàng)建,則以相應(yīng)的權(quán)限創(chuàng)建*/

          if(access(MYFIFO,F_OK)==-1)

          {

          if((mkfifo(MYFIFO,0666)0)(errno!=EEXIST))

          {

          printf(Cannotcreatefifofilen);

          exit(1);

          }

          }

          /*以只讀阻塞方式打開(kāi)有名管道*/

          fd=open(MYFIFO,O_RDONLY);

          if(fd==-1)

          {

          printf(Openfifofileerrorn);

          exit(1);

          }

          while(1)

          {

          memset(buff,0,sizeof(buff));

          if((nread=read(fd,buff,MAX_BUFFER_SIZE))>0)

          {

          printf(Read'%s'fromFIFOn,buff);

          }

          }

          close(fd);

          exit(0);

          }

          為了能夠較好地觀察運(yùn)行結(jié)果,需要把這兩個(gè)程序分別在兩個(gè)終端里運(yùn)行,在這里首先啟動(dòng)讀管道程序。讀管道在建立管道之后就開(kāi)始循環(huán)地從管道里讀出內(nèi)容,如果沒(méi)有數(shù)據(jù)可讀,則一直阻塞到寫(xiě)管道向管道寫(xiě)入數(shù)據(jù)。在啟動(dòng)了寫(xiě)管道程序后,讀能夠從管道里讀出用戶的輸入內(nèi)容,程序運(yùn)行結(jié)果如下所示。

          終端一:

          $./fifo_read

          Read'FIFO'fromFIFO

          Read'Test'fromFIFO

          Read'Program'fromFIFO

          ……

          終端二:

          $./fifo_writeFIFO

          Write'FIFO'toFIFO

          $./fifo_writeTest

          Write'Test'toFIFO

          $./fifo_writeProgram

          Write'Program'toFIFO

          ……

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程


          數(shù)字通信相關(guān)文章:數(shù)字通信原理


          通信相關(guān)文章:通信原理



          上一頁(yè) 1 2 3 4 5 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();