管道
提供一個單路(單向)數據流,可以為兩個不同進程提供進程間的通信手段
#include <unistd.h> pipe( fd[]);
返回兩個文件描述符,fd[0]() 和 fd[1]()
管道間的通信通常是使用 read 和 write 函數完成的
管道的典型用法:
首先,由父進程創建一個管道,然後調用fork派生一個自身的副本
接著,父進程關閉管道的讀端,子進程關閉管道的寫段
這樣就在父子進程間提供了一個單向數據流
雙管道:
當需要一個雙向數據流的時候,我們必須創建兩個管道,每個方向一個
pipe1[], pipe2[( (childpid = Fork()) ==);
FIFO
指代先進先出(first in, first out),是一個單向數據流
不同於管道的是,每個FIFO有一個路徑名與之關聯,從而允許無親緣關系的進程訪問同一個FIFO,因而也稱"有名管道"。()
#include <sys/types.h><sys/stat.h> mkfifo( * pathname, mode_t mode);
pathname是一個路徑名,也是該FIFO的名字
mode指文件的權限位
S_IRUSRS_IWUSR
用戶(屬主)讀用戶(屬主)寫
S_IRGRPS_IWGRP
(屬)組成員讀(屬)組成員寫
S_IROTHS_IWOTH
其他成員讀其他成員寫
常值 FIFO_MODE 在 unpipc.h 中定義:
FIFE_MODE ( S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH )
與管道不同的是:
FIFO1 "/tmp/fifo.1" FIFO2 "/tmp/fifo.2" ( (mkfifo(FIFO1, FILE_MODE) < ) && (errno !=( (mkfifo(FIFO2, FILE_MODE) < ) && (errno !=( (childpid = Fork()) === Open(FIFO1, O_RDONLY, = Open(FIFO2, O_WRONLY, = Open(FIFO1, O_WRONLY, = Open(FIFO2, O_RDONLY, );