為什麼說極簡呢,因為下面這個程式只能從一端寫另一端讀。(單工通訊)
注意:有名管道用於系統中任意兩個程序間通訊(不需要有親緣關係)
fifo_read.c
#include
#include
#include
#include
#include
#include
#include
#include
int main()
; ret = mkfifo("fifo.tmp", o_creat | o_excl); //建立有名管道
if (-1 == ret) //建立失敗
fd = open("fifo.tmp", o_rdonly); //以唯讀方式開啟
if(-1 == fd) //開啟失敗
while(1)
if(!strncmp(buf, "bye", 3)) //以bye結束
printf("read from fifo.tmp: %s\n",buf);
memset(buf, 0, sizeof(buf)); //清空緩衝區
unlink("fifo.tmp"); //關掉管道檔案,方便程式下次執行
}return
0;}
fifo_write.c
#include
#include
#include
#include
#include
#include
#include
int main()
; int fd, ret;
fd = open("fifo.tmp", o_wronly); //以只寫方式開啟
if(-1 == fd)
while(1)
if(!strncmp(buf, "bye", 3)) //以bye結束
memset(buf, 0, sizeof(buf)); //清空緩衝區
}return
0;}
上面兩個程式(程序)前者為讀,後者為寫,注意第乙個程式裡面首先要建立乙個有名管道,所以兩個程式執行的先後順序是前者先執行(此時,一直讀到空)。執行結果如下:
程序間通訊 有名管道
無名管道,由於沒有名字,只能用於親緣關係的程序間通訊.為了克服這個缺點,提出了有名管道 fifo fifo不同於無名管道之處在於它提供了乙個路徑名與之關聯,以fifo的檔案形式存在於檔案系統中,這樣,即使與fifo的建立程序不存在親緣關係的程序,只要可以訪問該路徑,就能夠彼此通過fifo相互通訊,因...
程序間通訊 有名管道
mkfifo test 這條命令建立了乙個名字為 test 的命名管道。接下來我們用乙個程序向這個管道裡面寫資料,然後有另外乙個程序把裡面的資料讀出來。echo this is a pipe test 寫資料 這個時候管道的內容沒有被讀出的話,那麼這個命令就會一直停在這裡,只有當另外乙個程序把 te...
程序間通訊 管道(有名管道)
前幾天我們簡單的介紹了程序間通訊的一種渠道 管道,我們有說道管道的概念,管道的通訊原理,還提到了管道的兩種型別 有名管道和無名管道,今天我們就來說說有名管道吧 基本概念 有名管道在檔案目錄中有乙個檔案標示 管道檔案 實際不佔據磁碟空間。資料快取在記憶體上 只有使用時記憶體才開闢,由於在記憶體上,因此...