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输出。现在,该管道存有我们的消息,我们可以利用第 24行的read函数来读它。对于应用程序来说,我们是利用stdin描述符从管道读取消息的。read函数把从管道读取的数据存放到buffer变量 中。然后在buffer变量的末尾添加一个NULL,这样就能利用printf函数正确的输出它了。在本例中的管道可以利用下图解释:

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