程序通訊FIFO

2021-09-13 18:46:04 字數 1174 閱讀 1732

fifo

fifo常被稱為命名管道,以區分管道(pipe)。管道(pipe)只能用於「有血緣關係」的程序間。但通過fifo,不相關的程序也能交換資料。

fifo是linux基礎檔案型別中的一種。但,fifo檔案在磁碟上沒有資料塊,僅僅用來標識核心中一條通道。各程序可以開啟這個檔案進行read/write,實際上是在讀寫核心通道,這樣就實現了程序間通訊。

建立方式:

1. 命令:mkfifo 管道名

2. 庫函式:int mkfifo(const char *pathname,  mode_t mode);  成功:0; 失敗:-1

一旦使用mkfifo建立了乙個fifo,就可以使用open開啟它,常見的檔案i/o函式都可用於fifo。如:close、read、write、unlink等。

open 注意事項,開啟fifo檔案時,read端會阻塞等待write端open,write端同理,也會阻塞等待另一端開啟。

fifo讀端

#include #include #include #include #include #include #include void sys_err(char *str)

int main(int argc, char *ar**)

fd = open(ar**[1], o_rdonly);

if (fd < 0)

sys_err("open");

while (1)

close(fd);

return 0;

}

fifo寫端

#include #include #include #include #include #include #include void sys_err(char *str)

int main(int argc, char *ar**)

fd = open(ar**[1], o_wronly);

if (fd < 0)

sys_err("open");

i = 0;

while (1)

close(fd);

return 0;

}

程序間通訊 fifo

fifo,同時也被稱為有命管道,未命名的管道只能用於有親緣關係之間的程序間的通訊,而命名管道可以實現兩個互不相關之間程序的通訊。在linux下,我們可以通過mkfifo命令建立命名管道,fifo實際上並不占取實際的儲存空間,只是在核心pipe中的乙個鏈結。我們可以通過其大小來檢視。fifo實際結構為...

程序間通訊(FIFO)

一 有名管道 管道沒有名字,因此它們只能用於有乙個公共祖先各個程序之間的通訊,我們無法在無親緣關係的程序之間程序ipc通訊。有名管道即fifo,指先進先出,它是乙個半雙工的資料流,不同於管道的是每乙個fifo有乙個路徑名與之關聯,從而允許無 親緣之間的程序進行通訊。二 建立的函式 fifo由mkfi...

程序間通訊之FIFO

管道使用起來很方便,但是沒有名字,因此只能用於具有親緣關係的程序之間進行通訊,而有名管道就克服了這一點,fifo管道提供了乙個路徑名與之相對應,即使程序不是親緣程序,只要能訪問到該路徑就能使用fifo進行通訊。有名管道的建立 include include int mkfifo const char...