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用作匯聚點,在...