天天看點

程序間通信

1.無名管道 

int pipe(int pipefd[2]);

參數:

@pipefd 獲得操作管道的檔案描述符 

傳回值:

成功傳回0, 失敗傳回-1 

特點:

<1>.pipefd[0] 讀管道檔案描述符 ,pipefd[1] 寫管道檔案描述符 

<2>.隻能親緣關系間程序通信(親緣關系程序存在資料拷貝)

練習:

父程序向管道中輸入資料,子程序從管道中讀取資料,然後輸出 

當輸入"quit"的時候,父子程序結束

----------------------------------------------------------------------------

管道讀寫規則:

<1>寫端存在,讀管道 

   管道中有資料,讀取實際的資料,如果沒有資料,讀則阻塞 

<2>寫端不存在,讀管道   

   管道中有資料,讀取實際的資料,如果管道中沒有資料,讀不阻塞,傳回 0 

<3>讀存在,寫管道 

   管道空閑的時候,寫入資料,管道滿的時候,寫阻塞 

<4>讀端不存在,寫管道 

   此時寫管道沒有意義,核心會發送SIGPIPE殺死寫管道的程序

2.有名管道 

<1>可以實作任意程序間通信 

<2>在檔案系統存在名字,是管道檔案,不占用磁盤空間 

(1)建立有名管道檔案 

int mkfifo(const char *pathname, mode_t mode);

(2)打開有名管道檔案 

[1]隻讀方式打開有名管道文則阻塞,直到另一端以寫的方式打開

[2]隻寫方式打開有名管道文則阻塞,直到另一端以讀的方式打開

(3)通過read/write讀寫有名管道 

注意:有名管道讀寫規則遵從無名管道的讀寫規則

A 程序和B程序聊天

繼續閱讀