fifofifo常被稱為命名管道,以區分管道(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...