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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97