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