linux 匿名管道pipe

2021-07-27 00:08:02 字數 911 閱讀 7927

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

#include

int pipe(int filedes[2]); 

呼叫pipe函式時在核心中開闢一塊緩衝區(稱為管道)用於通訊,它有乙個讀端乙個寫端,然後通

過filedes引數傳出給使用者程式兩個檔案描述符,filedes[0]指向管道的讀端,filedes[1]指向管道的

寫端(很好記,就像0是標準輸⼊1是標準輸出一樣)。所以管道在使用者程式看起來就像乙個開啟

的檔案,通過read(filedes[0]);或者write(filedes[1]);向這個檔案讀寫資料其實是在讀寫核心緩衝

區。pipe函式呼叫成功返回0,呼叫失敗返回-1。

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

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

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

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

#include#include#include#include#includeint main()

; if(pipe(fds)<0)

pid_t id=fork();

if(id==0)

close(fds[1]);

} else

printf("father msg from child:%s",buf);

if(waitpid(id,null,0)<0)

}} return 0;

}

結果

pipe建立匿名管道

pipe建立的管道為匿名管道,匿名管道只能在有關係的程序之間使用,例如父程序和子程序,由同乙個父程序建立的子程序或稱為兄弟程序 如圖所示若管道只有乙個,並且管道只能程序單向通訊,因此,在子程序繼承父程序的檔案描述符之後,父程序關閉fd 0 檔案描述符,子程序關閉fd 1檔案描述符,這樣父程序和子程序...

Linux 匿名管道pipe與命名管道FIFO

什麼是管道 功能 建立匿名管道 引數 fd 檔案描述符陣列,其中fd 0 表 示讀端,fd 1 表 示寫端 返回值 成功返回0,失敗返回錯誤 實現 include include include include int main memset buf,0x00,sizeof buf 從管道中讀取 i...

linux管道通訊(pipe)

linux pipe適合於父子程序之間進行通訊。如下面 所示 include include include int main create sub process pid fork if 1 pid else if 0 pid else return 0 當呼叫fork函式後,fork將會返回兩個...