Linux下的管道编程技术(6)

发表于:2013-03-06来源:开源黄页作者:天狼星点击数: 标签:linux
6: ...{ 7: int pfds[2]; 8: 9: if ( pipe(pfds) == 0 ) ...{ 10: 11: if ( fork() == 0 ) ...{ 12: 13: close(1); 14: dup2( pfds[1], 1 ); 15: close( pfds[0] ); 16: execlp( ls, ls, -1, NULL ); 17: 18: } else
6: ...{
7: int pfds[2];
8:
9: if ( pipe(pfds) == 0 ) ...{
10:
11: if ( fork() == 0 ) ...{
12:
13: close(1);
14: dup2( pfds[1], 1 );
15: close( pfds[0] );
16: execlp( "ls", "ls", "-1", NULL );
17:
18: } else ...{
19:
20: close(0);
21: dup2( pfds[0], 0 );
22: close( pfds[1] );
23: execlp( "wc", "wc", "-l", NULL );
24:
25: }
26:
27: }
28:
29: return 0;
30: }

  在该程序中,需要格外关注的是,我们的子进程把它的输出重定向的管道的输入,然后,父进程将它的输入重定向到管道的输出。这在实际的应用程序开发中是非常有用的一种技术。

  2.3 mkfifo函数

  mkfifo函数的作用是在文件系统中创建一个文件,该文件用于提供FIFO功能,即命名管道。前边讲的那些管道都没有名字,因此它们被称为匿名管道,或简称管道。对文件系统来说,匿名管道是不可见的,它的作用仅限于在父进程和子进程两个进程间进行通信。而命名管道是一个可见的文件,因此,它可以用于任何两个进程之间的通信,不管这两个进程是不是父子进程,也不管这两个进程之间有没有关系。Mkfifo函数的原型如下所示:

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