UNIX命名管道FIFO

2021-06-26 22:48:58 字數 1286 閱讀 6882

fifo,又稱命名管道,是linux下(unix環境下)一種程序間通訊的機制,應用廣泛。

函式mkfifo用於建立命名管道,使用命令man 3 mkfifo可檢視此函式資訊。

fifo建立後,可以像普通檔案一樣對其訪問。

執行命令

$ mkfifo /tmp/fifo

$ cat /tmp/fifo

程式阻塞。

再開啟乙個shell,執行

$ echo hello > /tmp/fifo

前乙個程式返回,顯示hello

下面用乙個簡單程式,演示fifo ipc的用法。

該程式分為2端:

server程式建立乙個fifo,並從fifo讀取字元,轉換成大寫後輸出到螢幕。

client程式讀取使用者輸入並寫入fifo。

common.h

[cpp]view plain

copy

print?

#include 

#include 

#include 

#include 

#define fifo_path "/tmp/myfifo"

server.c

[cpp]view plain

copy

print?

/**將從fifo收到到資料(字元)轉換為大寫,並輸出到螢幕

*/#include "common.h"

int main()  

while(1)  

}  }  

執行server後,可看到建立了檔案/tmp/myfifo,這是mkfifo函式指定的命名管道的路徑(名字)。

當然,系統不會真的在磁碟上建立這個檔案。

client.c

[cpp]view plain

copy

print?

/**讀取輸入,並寫入fifo

*/#include "common.h"

int main()  

while(c = getchar())  

}  

先啟動server程式,再執行client,隨便輸入些字元。

server端將在螢幕上顯示轉換為大寫後的輸入字元。

Unix管道與命名FIFO

事實上,管道與fifo是不同的 管道是pipe,基本上pipe 完就可以用了 fifo需要先mkfifo,然後再open 如果mkfifo發現fifo已存在,那麼說明已建立過,此時open pipe沒有名字,只能在親緣程序裡使用。當然,技術上講,可以傳遞描述符後,非親緣也可以用。但比較麻煩 fifo...

命名管道(FIFO)

client.c include include include include include define path home chen 7month 7 28 fifo my fifo 這個就是管道的名字,和建立的路徑 int main char buf 1024 while 1 close ...

命名管道 FIFO

解決了無關程序不能使用管道通訊的問題。pipe是線性的,乙個pipe只能有乙個輸入輸出,fifo是非線性的,乙個fifo可以有多個輸入或輸出。fifo的用途 1 shell命令使用fifo將資料從一條管道傳送到另一條時,無需建立中間臨時檔案。2 客戶程序 伺服器程序應用程式中,fifo用作匯聚點,在...