1、IPC的持久性
1)程序相關的:IPC中資料一直存在到最後一個關聯程序關閉時
pipe、fifo等
2)核心相關的IPC:IPC中資料一直存在,除非核心重新開機或删除
消息隊列,共享記憶體等
3)檔案系統相關的IPC:IPC中資料一直存在,除非顯式删除
檔案
2、管道
匿名管道(pipe):隻能用于同一個祖先的程序組
有名管道(fifo):不相關的程序也可以使用
3、匿名管道
int pipe(int filedes[2]);
fildes[0] 用于從管道中讀取資料
fildes[1] 用于将資料寫入管道
不需要open,直接read/write 等系統調用
系統自動删除,程序不需要考慮
示例

View Code
4、有名管道
int mkfifo(const char *pathname, mode_t mode);
pathname等參數和open類似
需要open,open必須隻能是隻讀或隻寫。
open阻塞模式:阻塞到有程序以相對應方式打開相同的fifo。
open非阻塞式:隻讀打開立刻傳回;隻寫時,如果沒有對應的程序已經隻讀打開相同的fifo,傳回錯誤。
open之後才能read/write,操作與檔案類似。
FIFO必須顯式删除(調用unlink),但fifo中儲存的資料是程序相關的

5、寫管道時,常數PIPE_BUF(一般為4096)規定了核心中管道緩存器的大小,如果寫小于或等于PIPE_BUF大小的資料進入不會被打斷,但大于PIPE_BUF的資料可能會被其他程序打斷
關閉所有的寫端,read傳回0
關閉所有的讀端,write會産生SIGPIPE信号
不能lseek,否則傳回ESPIPE錯誤
參考