Linux程序間通訊 有名管道FIFO

2021-10-24 15:54:59 字數 1007 閱讀 8411

常規的匿名管道通過pipe建立一片記憶體緩衝區,並對外提供兩個檔案描述符,用於唯讀或者只寫操作。但其使用範圍很小,只能用於父、子程序間的通訊。因此linux還提供有名管道的支援。

管道的本質是一片可以讀寫的緩衝區域,linux將其描述為檔案(unix思想:一切io皆是檔案) 對於有名管道,其主要特點是:

【有名管道的建立】

mkfifo(const char* filename,mode)   //建立指定名字的管道檔案  並指明mode
int main()

return 0;

}

【讀端】

首先通過access判斷管道檔案是否存在,如果不在,那麼mkfifo建立乙個管道檔案。

然後,不斷的通過read從管道讀取字元,並顯示。

當接收的字元為'q'時,結束程式

int main(int argc, char *ar**)

{ int i, ret, fd;

char p_flag = 0;

if (access("./myfifo", 0) < 0) { //先判斷有名管道檔案是否存在,不存在需要先建立

ret = mkfifo("./myfifo", 0777); //許可權

if (ret < 0) {

cout<

分別啟動寫入端程式,讀取端程式,執行結果:

由此可見,有名管道 named pipe 其主要特點是:

提供了一種多程序之間通訊的方式,本質是多程序讀取同一片記憶體緩衝區。

相較於匿名管道,由於採取了檔名標識,可以在不是父子程序關係之間通訊。

對管道的讀寫操作與其它檔案操作類似,linux通過vfs進行抽象統一描述。(一切io皆是檔案思想)

程序間通訊 有名管道

無名管道,由於沒有名字,只能用於親緣關係的程序間通訊.為了克服這個缺點,提出了有名管道 fifo fifo不同於無名管道之處在於它提供了乙個路徑名與之關聯,以fifo的檔案形式存在於檔案系統中,這樣,即使與fifo的建立程序不存在親緣關係的程序,只要可以訪問該路徑,就能夠彼此通過fifo相互通訊,因...

程序間通訊 有名管道

mkfifo test 這條命令建立了乙個名字為 test 的命名管道。接下來我們用乙個程序向這個管道裡面寫資料,然後有另外乙個程序把裡面的資料讀出來。echo this is a pipe test 寫資料 這個時候管道的內容沒有被讀出的話,那麼這個命令就會一直停在這裡,只有當另外乙個程序把 te...

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

時隔很久,再來更博.今天主要寫的是linux中程序間通訊,程序間進行通訊的目的就是多個程序之間資料互相交換。程序間通訊方式有以下幾種 1 訊號 2 管道 分為有名管道和無名管道 3 訊號量 4 訊息佇列 5 共享儲存 共享記憶體 6 套接字 socket 其中套接字屬於多機通訊 全雙工通訊 其餘的屬...