Linux下的管道編程技術(7)

發表于:2013-03-06來源:開源黃頁作者:天狼星點擊數: 標簽:linux
#include #include int mkfifo( const char *pathname, mode_t mode ); mkfifo函數需要兩個參數,第一個參數(pathname)是將要在文件系統中創建的一個專用文件。第二個參數(mo

#include
#include
int mkfifo( const char *pathname, mode_t mode );

  mkfifo函數需要兩個參數,第一個參數(pathname)是將要在文件系統中創建的一個專用文件。第二個參數(mode)用來規定FIFO的讀寫 權限。Mkfifo函數如果調用成功的話,返回值為0;如果調用失敗返回值為-1。下面我們以一個實例來說明如何使用mkfifo函數建一個fifo,具 體代碼如下所示:

int ret;
...
ret = mkfifo( "/tmp/cmd_pipe", S_IFIFO | 0666 );
if (ret == 0) ...{
// 成功建立命名管道
} else ...{
// 創建命名管道失敗
}

  在這個例子中,利用/tmp目錄中的cmd_pipe文件建立了一個命名管道(即fifo)。之后,就可以打開這個文件進行讀寫操作,并以此進行通信了。 命名管道一旦打開,就可以利用典型的輸入輸出函數從中讀取內容。舉例來說,下面的代碼段向我們展示了如何通過fgets函數來從管道中讀取內容:

pfp = fopen( "/tmp/cmd_pipe", "r" );
...
ret = fgets( buffer, MAX_LINE, pfp );

  我們還能向管道中寫入內容,下面的代碼段向我們展示了利用fprintf函數向管道寫入的具體方法:

pfp = fopen( "/tmp/cmd_pipe", "w+ );
...
ret = fprintf( pfp, "Here’s a test string!\n" );

  對命名管道來說,除非寫入方主動打開管道的讀取端,否則讀取方是無法打開命名管道的。Open調用執行后,讀取方將被鎖住,直到寫入方出現為止。盡管命名管道有這樣的局限性,但它仍不失為一種有效的進程間通信工具。

  上面介紹的是與管道有關的一些系統調用,下面介紹管道命令相關的系統命令。

  五、與管道相關的系統命令

  現在開始,我們來研究與進程間通信密切相關的一些系統命令。首先介紹的是mkfifo命令,它的功能與mkfifo系統調用相似,只不過它是用來在命令行中建立一個命名管道。

  在命令行下建立fifo的專用文件,即命名管道的常用方法有兩個,mkfifo命令便是其中之一。mkfifo命令的一般用法如下所示:

mkfifo [options] name

  這里的options一般為-m,即模式,用以指出讀寫權限;name是要創建的管道的名稱,必要時可以加上路徑。如果我們沒有規定權限,該命令會采取默認值0644。這里以一個具體實例來說明如何在/tmp目錄下面建立一個稱為cmd_pipe的命名管道:

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

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