Linux 程序通訊(無名管道)

2021-09-08 15:06:15 字數 1409 閱讀 6707

無名管道

無名管道是半雙工的,就是對於乙個管道來講,只能讀,或者寫。

無名管道只能在相關的,有共同祖先的程序間使用(即一般使用者父子程序)。

乙個fork或者execve呼叫建立的子程序繼承了父程序的檔案描述符。

開啟和關閉管道

int pipe(int filedes[2

]);在你從乙個管道中讀出或者寫入資料,這個管道必須存在。

如果成功建立了管道,則會開啟兩個檔案描述符,並把他們的值儲存在乙個整數陣列中。

第乙個檔案描述符用於讀取資料,第二個檔案描述符用於寫入資料。

管道的兩個檔案描述符相當於管道的兩端,一端只負責讀資料,一端只負責寫資料

如果出錯返回-1

,同時設定errno

關閉乙個檔案描述符用close()函式

關閉乙個管道的所有檔案描述符等於關閉這個管道(不能讀不能寫)

pipe()函式開啟管道一般不會失敗

讀寫管道

讀寫管道與讀寫普通檔案方式一樣,呼叫write與read函式即可。

幾乎不會在乙個程序中開啟乙個管道僅供程序自己使用,管道是用來交換資料的。

因為乙個程序已經能夠訪問它要通過管道共享的資料,和自己共享資料是沒有意義的。

試圖對乙個管道的某一端同時進行讀寫操作是乙個嚴重的錯誤。

//

無名管道

#include #include

#include

#include

#include

#include

#include

int main(int arg, char *args)

;

int no = 0

;

intstatus;

//create the conduit 建立乙個管道 並且開啟兩個檔案描述符

//管道中,第乙個檔案描述符唯讀,第二個檔案描述符只寫

no =pipe(fdarr);

if (no == -1

)

//建立父子程序

pid_t child =fork();

if (child == -1

)

//定義快取字串陣列

char buf[100] = ;

if (child == 0

)

//關閉子程序中讀檔案描述符

linux程序通訊 無名管道

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

程序通訊 無名管道

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

程序間通訊 無名管道

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