FIFO ,又稱具名管道 ,是Linux下(unix環境下)一種處理序間通訊的機制,應用廣泛。
函數mkfifo 用於建立具名管道,使用命令man 3 mkfifo 可查看此函數資訊。
FIFO建立後,可以像普通檔案一樣對其訪問。
Linux下一個同名命令mkfifo 也用於建立FIFO,例如:
執行命令
$ mkfifo /tmp/fifo
$ cat /tmp/fifo
程式阻塞。
再開啟一個shell,執行
$ echo hello > /tmp/fifo
前一個程式返回,顯示hello
下面用一個簡單程式,示範FIFO IPC的用法。
:http://download.csdn.net/source/2378181
該程式分為2端:
- server程式建立一個FIFO,並從FIFO讀取字元,轉換成大寫後輸出到螢幕。
- client程式讀取使用者輸入並寫入FIFO。
common.h
#include <stdio.h><br />#include <sys/types.h><br />#include <sys/stat.h><br />#include <fcntl.h><br />#define FIFO_PATH "/tmp/myfifo"
server.c
/*<br /> *將從FIFO收到到資料(字元)轉換為大寫,並輸出到螢幕<br /> */<br />#include "common.h"<br />int main()<br />{<br />int ret;<br />int fd;<br />char buffer;<br />int nread;<br />int i;<br />/*建立FIFO*/<br />ret = mkfifo(FIFO_PATH, 0777);<br />/*開啟FIFO*/<br />fd = open(FIFO_PATH, O_RDONLY);<br />if(-1 == fd)<br />{<br />printf("error/n");<br />return -1;<br />}<br />while(1)<br />{<br />nread = read(fd, &buffer, 1);<br />if(nread > 0)<br />{<br />buffer = toupper(buffer);<br />printf("%c", buffer);<br />}<br />}<br />}
運行server後,可看到建立了檔案/tmp/myfifo,這是mkfifo函數指定的具名管道的路徑(名字)。
當然,系統不會真的在磁碟上建立這個檔案。
client.c
/*<br /> *讀取輸入,並寫入FIFO<br /> */<br />#include "common.h"<br />int main()<br />{<br />int fd;<br />int ret;<br />char c;<br />fd = open(FIFO_PATH, O_WRONLY);<br />if(-1 == fd)<br />{<br />printf("error/n");<br />return -1;<br />}<br />while(c = getchar())<br />{<br />write(fd, &c, 1);<br />}<br />}
先啟動server程式,再運行client,隨便輸入些字元。
server端將在螢幕上顯示轉換為大寫後的輸入字元。
作者:ZhengZhiren
原文連結:http://blog.csdn.net/ZhengZhiRen/archive/2010/05/21/5613843.aspx