APUE學習之 程序通訊fifo實現管道

2021-07-08 19:22:12 字數 1101 閱讀 9097

一.fifo介紹

fifo函式用於建立命名管道,作用與匿名管道相同,不過可以在不同的程序之間使用,相當於對乙個普通檔案進行讀寫操作就可以了。

這個管道檔案是任何有許可權的程序都可以使用的,兩端都像操作乙個普通檔案一樣對它進行開啟、讀寫、關閉動作就可以了,只要一端寫入資料另一端就可以都出來。

#include #include int mkfifo(const char *pathname, mode_t mode);

引數列表:

pathname:管道檔案的路徑和檔名。

mode:建立管道檔案的許可權。傳入的 mode 值要與系統的 umask 值做運算:(mode & ~umask)

返回值:成功返回 0,失敗返回 -1 並設定 errno。

二. **實現

父程序先建立了兩個程序,然後,直接退出,兩個子程序之間沒有關係,但可以使用fifo來進行通訊。

#include#include#include#include#include#includeint main(int argc,char *argv)

fflush(null);

if((pid=fork())<0)

else if(pid==0)

write(fifofd,"hello!",7);

sleep(1);

read(fifofd,buf,bufsiz);

//fputs(buf,stdout);

printf("child 1 recieve data:%s\n",buf);

close(fifofd);

exit(0);

} else

else if(pid==0)

read(fifofd,buf,bufsiz);

//fputs(buf,stdout);

printf("child 2 recieve data:%s\n",buf);

write(fifofd,"hi,how are you",15);

close(fifofd);

exit(0);

} else

}}

程序間通訊之FIFO

管道使用起來很方便,但是沒有名字,因此只能用於具有親緣關係的程序之間進行通訊,而有名管道就克服了這一點,fifo管道提供了乙個路徑名與之相對應,即使程序不是親緣程序,只要能訪問到該路徑就能使用fifo進行通訊。有名管道的建立 include include int mkfifo const char...

程序間通訊之FIFO

fifo有時被稱為命名管道。管道只能由相關程序使用,這些相關程序的共同祖先程序建立了管道。但是,通過fifo,不相關的程序也能交換資料。fifo是一種檔案型別 參考結構 成員st mode的編碼指明檔案是否是fifo型別。可以用s isfifo 巨集對此進行測試。建立fifo類似於建立檔案。確實,f...

程序通訊FIFO

fifo fifo常被稱為命名管道,以區分管道 pipe 管道 pipe 只能用於 有血緣關係 的程序間。但通過fifo,不相關的程序也能交換資料。fifo是linux基礎檔案型別中的一種。但,fifo檔案在磁碟上沒有資料塊,僅僅用來標識核心中一條通道。各程序可以開啟這個檔案進行read write...