Liunx C Pipe 無名管道 通訊

2021-10-04 05:39:44 字數 1245 閱讀 5826

pipe(無名管道):

pipe(無名管道)用於有緣程序間通訊,父子程序或兄弟程序,呼叫pipe函式建立pipe(無名管道),返回值為0,即成功,小於0,則失敗,其傳出引數為含有兩個元素的陣列,f[0]是管道的讀端,f[1]是管道的寫端,當父程序建立了子程序,子程序也會繼承父程序的檔案描述表,從而也指向同一檔案表。

程序a和程序b可以是父子程序,亦可是兄弟程序

關閉未使用的檔案描述符:

1 .當程序a為讀,程序b為寫的時候:

關閉程序a的寫檔案描述符4和程序b的讀檔案描述符3

2 .當程序a為寫,程序b為讀的時候:

關閉程序a的讀檔案描述符3,和程序b的寫檔案描述符4

下圖為上述的第一種情況:

}父子程序間通訊:

特殊點:

1 .讀取程序未關閉寫端,寫入程序寫完後,讀取程序讀完寫入程序的資料後,依然還會阻塞,因為讀入程序以為還有程序要寫入。

2 .寫入程序未關閉讀端,其他程序已全部關閉讀端,寫入程序依舊能寫入資料,直到寫滿管道,再寫入的話,程序就會阻塞,直到管道有資料讀出,才能解除阻塞。

3 .管道的讀端計數為0(沒有任何乙個程序的檔案描述符指向讀端),當乙個程序試圖寫入資料,核心將傳送sigpipe訊號,則會殺死該程序。(若sigpipe訊號**獲或忽略,則write函式會返回epipe錯誤)

4 . 管道的寫端計數為0(沒有任何乙個程序的檔案描述符指向寫端),當乙個程序試圖讀出資料,則讀取程序就會像讀完資料一樣。

linux管道(無名管道)

首先管道是程序之間的乙個單向資料流,它的資料流向由核心管理,只能從乙個程序流向另外乙個程序,乙個程序向管道寫入資料,另外乙個程序從這個管道讀取資料。在使用管道 無名管道 時,只能用在父子程序或者親屬程序之間,若要用在任意程序之間則需要使用fifo 有名管道 如圖程序ab通過管道進行資料交換。程序a通...

Linux管道(無名管道)

是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。它主要用...

無名管道性質

pipe函式。pipe buf ubunt下為65536.寫性質。讀端關閉時,寫入資料會受到核心傳來的sigpipe訊號。讀端未關閉,當管道內已經填滿了pipe buf而未有讀出時,則會阻塞在write函式中,直到管道另一邊有讀出則繼續寫入管道直到寫完。讀性質。寫端關閉時,read函式返回0.寫端存...