函式原型:
#include
file* popen(const char* command, const char* open_mode);
int pclose(file* fp);
函式 popen(): 允許乙個程式將另乙個程式作為新程序來啟動, 並可以傳遞資料給它或
者通過它接收資料。 command 字串是要執行的程式名。 open_mode 必須是「r」 或「w」 。
注意:對於普通的管道(單工的)就像通訊的雙方一樣,若一端為讀屬性,則相對於的另一端只能寫,反之。其他型別的半雙工的、或全雙工--如套接字管道,除外。
函式 pclose(): 用 popen 啟動的程序結束時, 我們可以用 pclose 函式關閉與之關聯的文
件流。
例子:example1: 從標準管道流中讀取,並列印/etc/profile 的內容
#include
int main() ;
while(fgets(buf, sizeof(buf), fp))
pclose(fp);
return 0; }
eg2: 寫到標準管道流並統計buf單詞數(被呼叫程式必須阻塞等待標準輸入)
#include
int main() ;
file *fp = popen("wc -w", "w");
fwrite(buf, sizeof(buf), 1, fp);
pclose(fp);
return 0; }
管道函式原型:
#include
int pipe(int fds[2]);
eg:
#include
#include
#include
#include
int main() ;
if(fork() == 0)else
return 0; }
1. 用函式建立和刪除 fifo 檔案
引數 pathname 為要建立的 fifo 檔案的全路徑名;
引數 mode 為檔案訪問許可權
如果建立成功, 則返回 0, 否則-1。
2. 用命令建立和刪除fifo檔案
3、如果以讀取方式開啟 fifo, 並且還沒有其它程序以寫入方式開啟 fifo, open 函式將被
阻塞; 同樣, 如果以寫入方式開啟 fifo, 並且還沒其它程序以讀取方式 fifo, open 函式也
將被阻塞。
與 pipe 相同, 關閉 fifo 時, 如果先關讀取端, 將導致繼續往 fifo 中寫資料的程序接
收 sigpipe 的訊號。
程序間通訊(1) 管道
linux下一切皆檔案,我們可以建立乙個管道檔案進行通訊,實際上是呼叫pipe函式在核心中開闢一塊緩衝區 稱為管道 用於通訊,管道是一種最基本的ipc機制,由pipe函式建立 include int pipe int filedes 2 它有乙個讀端乙個寫端,然後通過filedes引數傳出給使用者程...
程序間通訊 之 管道
一 無名管道 特點 具有親緣關係的程序間通訊,但不僅僅指父子程序之間哦。1 無名管道的建立 int pipe int pipefd 引數 pipefd 陣列的首位址 返回值 成功返回0,失敗返回 1 注意 無名管道存在核心空間,建立成功會給使用者空間兩個檔案描述符,fd 0 讀管道 fd 1 寫管道...
程序間通訊之管道
我們將乙個程序到另乙個程序的資料流稱為管道,它是程序間通訊最古老的方式。管道分為兩種 匿名管道與命名管道。匿名管道 顧名思義,所謂的匿名管道自然就是沒有名字的管道,這種管道通常用於有親緣關係的程序間的通訊。匿名管道通常由pipe函式來建立,當乙個程序建立了乙個匿名管道後,它們的模型就是這樣的 可以看...