天天看點

11、fifo,pipe簡介

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 等系統調用

系統自動删除,程序不需要考慮

示例

11、fifo,pipe簡介
11、fifo,pipe簡介

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中儲存的資料是程序相關的

11、fifo,pipe簡介
11、fifo,pipe簡介

5、寫管道時,常數PIPE_BUF(一般為4096)規定了核心中管道緩存器的大小,如果寫小于或等于PIPE_BUF大小的資料進入不會被打斷,但大于PIPE_BUF的資料可能會被其他程序打斷

關閉所有的寫端,read傳回0

關閉所有的讀端,write會産生SIGPIPE信号

不能lseek,否則傳回ESPIPE錯誤

參考

繼續閱讀