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