程序間通訊 無名管道PIPE

2021-10-25 08:35:10 字數 1314 閱讀 3241

無名管道pipe(僅在記憶體中存在,檔案系統不可見)

無名(有名)管道:管道是一種程序間通訊機制,好比乙個管子,一邊乙個口,乙個往裡放,另一頭可以往出取,操作是雙向的

無名管道特點:只能用於有親緣關係的近緣之間的通訊

單工的通訊模式,具有固定的讀端和寫段

無名管道建立時會返回兩個檔案描述符,分別用於讀寫管道

#include

int pipe2(int pipefd[2], int flags);(暫時沒了解)

int pipe(int pipefd[2]);

成功時返回0,失敗時返回eof(-1);

pipefd包含兩個元素得整形陣列,用來儲存檔案描述符

pipefd[0]用於讀管道,pipefd[1]用於寫管道

**如下(示例):

##包含所需標頭檔案

#include

#include

#include

#include

## 2.正文**段

**如下(示例):

intmain

(void

) fd =

fork()

;//建立子程序

if(fd==-1

)//判斷子程序是否建立成功

else

if(fd ==0)

//子程序

else

if(fd >0)

//父程序

return0;

}# 讀寫管道注意(先建立無名管道,再建立子程序)

讀無名管道

1.當寫端存在

管道內有資料 read返回實際讀取的位元組數

管道內無資料 程序堵塞

2.當寫段不存在

管道內有資料 read返回實際讀取的位元組數

管道內無資料 read返回0

寫無名管道

1.當讀端存在

有空間 write返回實際寫入的位元組數

無空間 程序堵塞

2.讀讀端不存在

有空間 管道破裂(sigpipe)

無空間 管道破裂(sigpipe)

如何獲取無名管道的大小:

①迴圈寫入管道,直到堵塞

②統計迴圈次數

linux 無名管道(預設)大小為64個位元組(64k)

檢視所有訊號表:kill -l

管道破裂signal:sigpipe

如何驗證管道破裂(程序被訊號結束)

①子程序寫管道

②父程序**

1 程序間通訊 PIPE(無名管道)

1 在子程序中寫入資料,在父程序中讀取資料 code 結果 now,write data to the pipe the data i wrote is jason s messag now read data from pipe the data from pipe is jason s mess...

無名管道(pipe)通訊

這個程式用無名管道實現命令 cat etc passwd grep root 其實在終端命令中 就是乙個管道 cat etc passwd會把結果列印到標準輸出 grep root 會把結果從標準輸入 實現流程 1.父程序生產兩個子程序 程序扇的概念 2.子程序a a 把標準輸出定位到管道寫端,因為...

程序間通訊 無名管道

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