程序通訊中的無名管道

2021-08-21 17:27:32 字數 936 閱讀 8964

1,無名管道的建立

#include

int pipe(int pipefd[2]);

返回值:成功返回0,失敗返回-1,並且可以通過perror把錯誤碼列印出來。

2,用法

1) 建立管道 pipe。

2)關閉無關的埠。(本身是全雙工的,但是我們兩個程序用乙個管道通訊,會按某種同步方式去讀寫資料,否則

會造成資料錯誤,所以把其中一端關閉 close(fd))

3) int pipefd[2]這裡代表的是兩個檔案描述符,pipefd[0]--->讀  read(pipefd[0], buf, len );

pipefd[1]--->寫  write(pipefd[1], buf, len);

4) 使用結束後關閉對應的埠。

特點:1、在資料交換前,管道兩端都需要開啟,如果你只開啟了其中一端,此端就會被阻塞,直到另外一端也被開啟。

2、阻塞地讀或者寫:讀的時候,如果沒有資料可讀,就會被阻塞。寫的時候,沒有空間,write就會被阻塞。

3、非阻塞的方式讀寫:讀的時候,如果沒有資料,立刻返回,並且會設定對應的錯誤碼;寫的時候,如果沒有

空間,會立刻返回,並且會設定對應的錯誤碼

例子:在兩個進得到的間通訊,將父程序從鍵盤得到得內容通過子程序讀取出來並顯示

#include

#include

#include

#include

int main()

pid = fork();   //建立程序

if(pid < 0) //程序建立失敗

else if(pid == 0) //子程序

else //父程序

return 0;

}結果:

程序通訊 無名管道

管道是單向的 先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。管道包括無名管道和有名管道兩種,前者用於父程序和子程序間的通訊,後者可用於執行於同一系統中的任意兩個程序間的通訊。乙個程序 寫程序 在管道的尾部寫入資料,另乙個程序 讀程序 從管道的頭部讀出資料。管道提供了簡單的流控制機制,程...

linux程序通訊 無名管道

linux無名管道通訊特點無名管道是半雙工的通訊方式,資料只能一方傳送,另一方接收。無名管道只適用於親緣關係的程序通訊。資料的讀出和寫入 乙個程序向管道中寫的內容被管道另一端的程序讀出。寫入的內容每次都新增在管道緩衝區的末尾,並且每次都是從緩衝區的頭部讀出資料。include include inc...

程序間通訊 無名管道

在上次的部落格中,我給大家介紹了程序間通訊的方式 有名管道。管道分為有名管道和無名管道,那麼此次我將給大家介紹一下另一種管道通訊 無名管道。有名管道是可以應用於任何兩個程序之間資料的單向傳遞,而無名管道是相對於有名管道的,無名管道在使用時產生,不使用後釋放,並不會在系統上留下任何痕跡。無名管道因其使...