無名管道無名管道是半雙工的,就是對於乙個管道來講,只能讀,或者寫。
無名管道只能在相關的,有共同祖先的程序間使用(即一般使用者父子程序)。
乙個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...
程序通訊 無名管道
管道是單向的 先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。管道包括無名管道和有名管道兩種,前者用於父程序和子程序間的通訊,後者可用於執行於同一系統中的任意兩個程序間的通訊。乙個程序 寫程序 在管道的尾部寫入資料,另乙個程序 讀程序 從管道的頭部讀出資料。管道提供了簡單的流控制機制,程...
程序間通訊 無名管道
在上次的部落格中,我給大家介紹了程序間通訊的方式 有名管道。管道分為有名管道和無名管道,那麼此次我將給大家介紹一下另一種管道通訊 無名管道。有名管道是可以應用於任何兩個程序之間資料的單向傳遞,而無名管道是相對於有名管道的,無名管道在使用時產生,不使用後釋放,並不會在系統上留下任何痕跡。無名管道因其使...