程序間的通訊之1 管道

2021-08-03 22:28:52 字數 1457 閱讀 7658

函式原型:

#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函式來建立,當乙個程序建立了乙個匿名管道後,它們的模型就是這樣的 可以看...