管道,通常指無名管道,是unix系統ipc最古老的形式
1、#include // 標頭檔案
2、int fd[2]; // fd[0]:讀端 / fd[1]:寫端
3、 pipe(fd) //建立管道
4、傳輸資訊時,傳送端先關閉讀端fd[0],再進行寫操作
接收端反之,close(fd[1]); read( );
#include
#include
#include
intmain()
pid =
fork()
;//建立程序
if(pid<0)
else
if(pid >0)
//父程序
else
return0;
}
建立命名管道時,可能會存在管道名已存在造成建立失敗退出現象
1、mkfifo() 建立命名管道
2、perror()函式 顯示錯誤原因到標準輸出
//int mkfifo(const char *pathname,mode_t mode)
//mode與open函式中的mode相同
intmain()
return0;
}
當open乙個fifo時,是否設定非阻塞標(o_nonblock)有區別:
1、若沒有指定,唯讀open(o_rdonly)要阻塞到某個其他的程序為寫(write)而開啟此fifo。反之只寫開啟(o_wronly),要等到另乙個檔案唯讀開啟。
(eg:-------將乙個只寫開啟,等待另乙個write執行時,實現資訊傳輸)
2、若指定o_nonblock,則唯讀open立即返回,而只寫open將出錯返回-1
<>
fifo_read.c
#include
#include
#include
#include
#include
//perror
#include
intmain()
int fd =
open
("./guandao"
,o_rdonly)
;//以唯讀開啟
printf
("open success\n");
return0;
}
fifo_write.c
int
main()
在兩個終端裡用 gcc 分別編譯執行上面兩個檔案,只執行其中乙個會阻塞等待,當另乙個執行時,兩個程序才會列印出相應內容。
如果通過fifo,兩個程序傳遞資訊,通過分別 read(fd,buf,size)及write(fd,buf,size)進行《參考收藏博文demo**》
程序間通訊 IPC 管道
管道是unix ipc最古老的形式,所有unix系統都提供此通訊機制。管道的兩種限制 1 半雙工,資料單方向流動。2只能用於具有公共祖先的程序之間。需要雙方通訊時,需要建立起兩個管道。例外 流管道沒有限制1,fifo和命名管道沒有限制2。管道是乙個檔案,但它不屬於某種檔案系統,而是 單獨構成一種檔案...
程序間通訊(IPC) 管道
二 fifo 命名管道 參考管道是一種最基本的ipc機制,作用於有血緣關係的程序之間,完成資料傳遞,呼叫pipe系統函式即可建立乙個管理。有如下性質 1.其本質是乙個偽檔案 實為核心緩衝區 所謂的偽檔案是指不佔磁碟空間大小的檔案,linux的檔案除了 l d,其它的s,b,c,p等都是偽檔案。2.由...
Linux程序間通訊(IPC) 匿名管道
對於read讀取緩衝區為空,阻塞和非阻塞的情況 對write寫快取區滿時,阻塞和非阻塞的情況 1.建立管道,函式原型如下 int pipe int filedes 2 說明 返回值為int型別,0表示建立成功,1表示建立失敗。引數為2個檔案描述符,fd 0 表示讀描述符,fd 1 表示寫描述符。2....