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