unp pipe popen函數

在unix中pipe是一種很早的進程間通訊的手段,主要用於有血緣關係的進程(例如父子進程等)。pipe是半雙工的,即數據流的方向是單向的。關於pipe的內容在unp的pipe和fifo章節進行總結吧,本文主要分析popen函數。

標準I/O庫提供了popen函數,原型如下:

FILE *popen(const   char *cmd,  const char *type);

int pclose(FILE  *stream);

其中cmd是一個shell命令行,當調用popen函數時,會創建一個pipe,這個pipe會用在調用進程和cmd shell命令之間進行通訊。popen的返回值是標準I/O的FILE結構,可以用於輸入或者輸出,具體是輸入還是輸出由type參數決定:

1、如果type=r,則調用進程從cmd的標準輸出中讀內容,即讀取的內容是cmd輸出的內容

用圖表示如下:

image

2、如果type=w,則調用進程將內容寫到cmd命令的標準輸入中,作爲cmd命令的標準輸入

image

那麼popen函數是如何實現的呢?APUE給出了一個版本,google code下搜了一個,如下所示:

          





                                             




當然,上面只是其中的一種實現方式而已,但整體的實現思路是類似的。

參考:google code popen實現、APUE popen實現

發佈了71 篇原創文章 · 獲贊 11 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章