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