程序通訊 命名管道 FIFO

2021-07-14 07:32:47 字數 1182 閱讀 8279

一.命名管道(fifo)

fifo不同於管道之處在於它提供一 個路徑名與之關聯,以fifo的檔案形式儲存於檔案系統中。命名管道是乙個裝置檔案,因 此,即使程序與建立fifo的程序不存在親緣關係,只要可以訪問該路徑,就能夠通過fifo 相互通訊。值得注意的是,fifo(first input first output)總是按照先進先出的原則工作,第一 個被寫入的資料將首先從管道中讀出。 

二.命名管道的建立

int mkfifo(const char *path,mode_t mode); 

int mknod(const char *path,mode_t mod,dev_t dev); 

函式mknod引數中path為建立的命名管道的全路徑名:mod為建立的命名管道的模式,指明其訪問許可權;dev為裝置值,該值取決於檔案建立的種類,它只在建立裝置檔案時才會用到。這兩個函式呼叫成功都返回0,失敗都返回-1。

三.測試用例

1.標頭檔案

#pragma once

#include#include#include#include#include#include#include#define _fifo_name_ "./my_fifo"

#define _size_ 1024

2:server端

#include"comm.h"

int main()

int fd = open(_fifo_name_,o_rdonly);

if(fd < 0)

char buf[_size_];

while(1)

close(fd);

return 0;

}

3.client端

#include"comm.h"

int main()

char buf[_size_];

while(1)

write(fd,buf,strlen(buf));

} return 0;

}

四.測試結果

以上就是本人在學習過程中的一些經驗總結。當然,本人能力有限,難免會有紕漏,希望大家可以指正。

程序通訊之命名管道 FIFO

匿名管道只能於有血緣關係的程序,那麼倆個沒有任何關係的程序怎麼通訊,這就出現了命名管道來克服這一問題。命名管道是乙個裝置檔案,只要訪問該路徑,就能通過這個共享資源來互相通訊。fifo是按照先進先出的原則工作的,第乙個被寫入的資料第乙個先被讀出。fifo可被用於複製序列管道命令之間的輸出流,於是也就不...

程序間通訊 管道 命名管道 FIFO

比較類似程序間的生產者 消費者模型。乙個程序向管道中寫入資料,另乙個程序從管道中讀出資料。pipe為無名管道,提供的是一組半雙工通訊方式。pipe會建立兩個檔案物件,乙個索引節點。pipe在核心中會有乙個快取,快取大小可能若干個頁大小。呼叫write像管道裡寫資料時,系統會將資料存於快取,另乙個執行...

Linux程序間通訊 命名管道fifo

服務端負責讀取管道中資料並將其列印出來 fifo pipe server.c include include include include include include include include include include include define buf len pipe buf...