Linux下的管道編程技術(2)

發表于:2013-03-06來源:開源黃頁作者:天狼星點擊數: 標簽:linux
11: const char *string=...{A sample message.}; 12: int ret, myPipe[2]; 13: char buffer[MAX_LINE+1]; 14: 15: /**//* 建立管道 */ 16: ret = pipe( myPipe ); 17: 18: if (ret == 0) ...{ 19: 20: /**//* 將
11: const char *string=...{"A sample message."};
12: int ret, myPipe[2];
13: char buffer[MAX_LINE+1];
14:
15: /**//* 建立管道 */
16: ret = pipe( myPipe );
17:
18: if (ret == 0) ...{
19:
20: /**//* 將消息寫入管道 */
21: write( myPipe[PIPE_STDOUT], string, strlen(string) );
22:
23: /**//* 從管道讀取消息 */
24: ret = read( myPipe[PIPE_STDIN], buffer, MAX_LINE );
25:
26: /**//* 利用Null結束字符串 */
27: buffer[ ret ] = 0;
28:
29: printf("%s\n", buffer);
30:
31: }
32:
33: return 0;
34: }

  上面的示例代碼中,我們利用pipe調用新建了一個管道,參見第16行代碼。 我們還建立了一個由兩個元素組成的數組,用來描述我們的管道。我們的管道被定義為兩個單獨的文件描述符,一個用來輸入,一個用來輸出。我們能從管道的一端 輸入,然后從另一端讀出。如果調用成功,pipe函數返回值為0。返回后,數組myPipe中存放的是兩個新的文件描述符,其中元素myPipe[1]包 含的文件描述符用于管道的輸入,元素myPipe[0] 包含的文件描述符用于管道的輸出。

  在第21行代碼,我們利用write函數把消息寫入管道。站在應用程序的角度,它是在向stdout輸出?,F在,該管道存有我們的消息,我們可以利用第 24行的read函數來讀它。對于應用程序來說,我們是利用stdin描述符從管道讀取消息的。read函數把從管道讀取的數據存放到buffer變量 中。然后在buffer變量的末尾添加一個NULL,這樣就能利用printf函數正確的輸出它了。在本例中的管道可以利用下圖解釋:

原文轉自:http://yp.oss.org.cn/blog/show_resource.php?resource_id=598

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97