Linux下處理序間通訊機制:FIFO(具名管道)

來源:互聯網
上載者:User

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端:

  1. server程式建立一個FIFO,並從FIFO讀取字元,轉換成大寫後輸出到螢幕。
  2. 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.