程序通訊之pipe通訊

2021-07-30 18:04:44 字數 917 閱讀 5085

管道是一種最基本的ipc機制,由pipe函式建立:

#include

int pipe(int filedes[2]);

管道作用於有血緣關係的程序之間,通過fork來傳遞呼叫pipe函式時在核心中開闢一塊緩衝區(稱為管道)用於通訊,它有乙個讀端乙個寫端,然後通過filedes引數傳出給使用者程式兩個檔案描述符,filedes[0]指向管道的讀端,filedes[1]指向管道的寫端(很好記,就像0是標準輸入1是標準輸出一樣)。所以管道在使用者程式看起來就像乙個開啟的檔案,通過read(filedes[0]);或者write(filedes[1]);

向這個檔案讀寫資料其實是在讀寫核心緩衝區。pipe函式呼叫成功返回0,呼叫失敗返回-1。

開闢了管道之後如何實現兩個程序間的通訊呢?比如可以按下面的步驟通訊。

1.父程序呼叫pipe開闢管道,得到兩個檔案描述符指向管道的兩端。

2.父程序呼叫fork建立子程序,那麼子程序也有兩個檔案描述符指向同一管道。

3.父程序關閉管道讀端,子程序關閉管道寫端。父程序可以往管道裡寫,子程序可以從

管道裡讀,管道是用環形佇列實現的,資料從寫端流入從讀端流出,這樣就實現了程序間通訊。

Linux C程序間通訊之pipe

多程序以及ipc管道方式程序間通訊 1 父程序呼叫pipe開闢管道,得到兩個檔案描述符指向管道的兩端。2 父程序呼叫fork建立子程序,那麼子程序也有兩個檔案描述符指向同一管道。3 父程序關閉管道讀端,子程序關閉管道寫端。父程序可以往管道裡寫,子程序可以從管道裡讀,管道是用環形佇列實現的,資料從寫端...

Linux程序間通訊之管道 pipe

管道是unix系統ipc的最古老的形式,並且所有unix系統都提供此種通訊機制。但是管道存在如下特點 管道是半雙工的。管道只能用在具有公共祖先的程序之間。管道的建立 管道是通過呼叫pipe函式建立的 include int pipe int filedes 2 引數filedes 2 是兩個檔案描述...

Linux中的程序通訊之pipe

linux中的程序通訊方式有很多種,首先來介紹一下管道。管道的特點是只能用在有 親緣 關係的父子程序之間。管道的建立 include includeint fd 2 int ret pipe fd if ret 1 父子程序之間的簡單通訊,父程序傳送一句話給子程序 從結果可以看出,父程序中的乙個字串...