• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 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

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>