一.命名管道(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...