中進程間通信方式中,有一種為無名管道。對管道的讀寫操作需要注意以下的使用規則:
1、當讀的時候:
(1) 有寫端,至少有一個進程,有寫端存在
有數據:使用read可以讀到pipe中的數據,返回實際讀取的字節數
無數據:阻塞,等待其他進程向管道寫入數據。
(2) 無寫端,所有進程,寫端都關閉了。
有數據:使用read可以讀到pipe中的數據,返回實際讀取的字節數
無數據:無寫端意味著所有的寫描述符關閉了,不會向管道中寫入數據了,會立刻返回0.
2、 當寫的時候:
(1) 有讀端,至少有一個進程,讀端存在。
有空間:可使用write向管道中寫入內容,返回實際寫入的字節數。
空間不足:有多少寫多少,沒寫完的阻塞等待,直到其他進程將管道中數據讀走,才繼續寫入數據。可寫一個程序來測試無名管道的大小。(64K)
(2) 無讀端,所有進程,寫端都關閉了。
沒有讀端的時候,想寫管道,會得到內核給的SIGPIPE信號。管道破裂。
管道讀端不存在的時候,內核是不允許向管道內寫入數據的。以下程序能夠驗證: