linux中匿名管道和命名管道

2021-07-27 17:50:05 字數 2723 閱讀 5430

1、建立管道和父子程序,子程序關閉讀端,父程序關閉寫端,子程序寫,父程序讀。

2、如果所有指向管道寫端的檔案描述符都關閉了(管道寫端的引用計數等於0),而仍然有程序 從管道的讀端讀資料,那麼管道中剩餘的資料都被讀取後,再次read會返回0,就像讀到檔案末尾一樣。

3、如果有指向管道寫端的檔案描述符沒關閉(管道寫端的引用計數大於0),而持有管道寫端的 程序也沒有向管道中寫資料,這時有程序從管道讀端讀資料,那麼管道中剩餘的資料都被讀取後,再次read會阻塞,直到管道中有資料可讀了才讀取資料並返回。

4、如果所有指向管道讀端的檔案描述符都關閉了(管道讀端的引用計數等於0),這時有程序向管道的寫端write,那麼該程序會收到訊號sigpipe,通常會導致程序異常終止.

1、client端

#include#include#include#include#include#includeint main()

char buf[128];

while(1)else if(s == 0)else

}close(fd);

return 0;

}

2、server端

#include#include#include#include#includeint main()

int fd = open("./fifo",o_rdonly);

if(fd < 0)

char buf[128];

while(1)else if(s == 0)else

}close(fd);

return 0;

}

client端輸入什麼,server端輸出什麼,結果如下所示:

命名管道和匿名管道

我們知道程序間是可以通訊的。可以達到資料傳輸 資源共享 事件通知 程序控制等目的。程序間通訊主要包括管道 系統ipc,套接字等。管道分為三種 1 普通管道 int pipe int fds 2 返回值0表示成功,1表示失敗 fd 0 讀 fd 1 寫 子程序往管道中寫資料,寫資料時要關閉讀端 父程序...

命名管道 匿名管道

有名字 則可以通過 名字 開啟相同的管道進行通訊,沒有名字 在核心中沒有明確標識 只能通過 子程序複製父程序的方式實現通訊,複製了檔案描述符 匿名管道只能用於具有親緣關係的程序間通訊。只要在建立程序之前建立管道,後邊的程序都可以實現通訊。命名管道可用於同一主機任意程序間通訊 作業系統在核心提供的一塊...

命名管道與匿名管道

匿名管道 父程序 include include main process information pp 定義結構體security attributes變數 char text 匿名管道程式測試!dword writetext ss.nlength sizeof ss 填充結構體中的各成員 ss....