極簡聊天 有名管道實現程序間通訊

2021-08-13 05:21:11 字數 1266 閱讀 1226

為什麼說極簡呢,因為下面這個程式只能從一端寫另一端讀。(單工通訊)

注意:有名管道用於系統中任意兩個程序間通訊(不需要有親緣關係)

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...

程序間通訊 管道(有名管道)

前幾天我們簡單的介紹了程序間通訊的一種渠道 管道,我們有說道管道的概念,管道的通訊原理,還提到了管道的兩種型別 有名管道和無名管道,今天我們就來說說有名管道吧 基本概念 有名管道在檔案目錄中有乙個檔案標示 管道檔案 實際不佔據磁碟空間。資料快取在記憶體上 只有使用時記憶體才開闢,由於在記憶體上,因此...