在命令列中 定義管道檔案 1.pipe 2.pipe
mkfifo 1.pipe 2.pipe
用函式定義管道 mkfifo ()
ex: mkfifo ( 「pipename」 , 0777);
一端寫,一端讀檔案
管道可被視為一段記憶體,資料結構是為迴圈鍊錶,有一定的容量限制
#include
#include
#include
#include
#include
intmain
(int argc ,
char
* ar**)
int fdr =
open
(ar**[1]
,o_rdonly)
;int fdw=
open
(ar**[2]
,o_wronly)
;char buf[
128]=;
while(1
)}
#include
#include
#include
#include
#include
intmain
(int argc ,
char
* ar**)
int fdw =
open
(ar**[1]
,o_wronly)
;int fdr=
open
(ar**[2]
,o_rdonly)
;char buf[
128]=;
while(1
)}
pipe的乙個特性
兩個程序,乙個讀的程序,乙個寫的程序,只有兩個程序同時操作乙個管道的時候管道才會傳送資料
write.c 寫程序
#include
#include
#include
intmain
(int argc ,
char
**ar**)
int fdw =
open
(ar**[1]
,o_wronly)
;printf
("i am writer fdw \n");
//如果沒有乙個程序從另一邊開啟管道,對管道進行讀,則不會執行列印
printf
("finish\n");
write
(fdw,
"hello world",11
);sleep(10
);close
(fdw)
;return0;
}
read.c 讀管道
int
main
(int argc ,
char
**ar**)
fdr =
open
(ar**[1]
,o_rdonly)
;printf
("i am read\n");
char buf[
120]=;
read
(fdr,buf ,
sizeof
(buf));
printf
("buf : %s\n"
,buf)
;close
(fdr)
;return0;
}
測試
一端寫,一端讀檔案
必須開啟兩端的埠才能進行,不然會被阻塞,在兩個程序中分別開啟讀埠和寫埠,或者再乙個程序中 以o_rdwr的方式開啟
從乙個關閉的管道中讀取檔案, 會發生什麼呢,讀取到0 不停的列印
// write.c 開啟一段時間結束
#include
#include
#include
intmain
(int argc ,
char
** ar**)
printf
("hello world\n");
return0;
}
不斷讀取buf ret返回值為 0 ,buf 讀到的為空
#include
#include
#include
#include
#include
intmain
(int argc ,
char
**ar** )
;while(1
)close
(fdr)
;printf
("hello world\n");
return0;
}
pipe管道通訊
pipe函式是用來建立管道的,當它建立成功會返回兩個檔案描述符,0是讀,1是寫 在用管道時,當我們使用讀端就要關閉寫,使用寫端就要關閉讀的功能。include include include include int main double shou 2 int i 0 int ret double ...
linux管道通訊(pipe)
linux pipe適合於父子程序之間進行通訊。如下面 所示 include include include int main create sub process pid fork if 1 pid else if 0 pid else return 0 當呼叫fork函式後,fork將會返回兩個...
無名管道(pipe)通訊
這個程式用無名管道實現命令 cat etc passwd grep root 其實在終端命令中 就是乙個管道 cat etc passwd會把結果列印到標準輸出 grep root 會把結果從標準輸入 實現流程 1.父程序生產兩個子程序 程序扇的概念 2.子程序a a 把標準輸出定位到管道寫端,因為...