關于管道(dao)使用規(gui)則的總結
							時間:2014-08-21      來源:未知 
							中進程間(jian)通信方式中,有一(yi)種為(wei)無名(ming)管道。對管道的(de)(de)讀寫操作需要注意(yi)以下的(de)(de)使用(yong)規則:
1、當讀的時候:
(1) 有寫(xie)(xie)端,至(zhi)少有一(yi)個進程,有寫(xie)(xie)端存(cun)在
有(you)數(shu)據(ju):使用read可以讀到pipe中的數(shu)據(ju),返(fan)回(hui)實際讀取的字節數(shu)
無數據:阻塞,等待(dai)其他進程向管道(dao)寫入數據。
(2) 無寫(xie)端(duan),所有進程(cheng),寫(xie)端(duan)都關閉了。
有數(shu)據:使用read可(ke)以讀到pipe中的(de)數(shu)據,返(fan)回(hui)實際讀取的(de)字節數(shu)
無數據:無寫(xie)端意味著(zhu)所有的寫(xie)描述(shu)符關閉了(le),不(bu)會向管道中寫(xie)入數據了(le),會立(li)刻(ke)返回0.
2、 當寫(xie)的時候(hou):
(1) 有讀(du)端,至少有一(yi)個進程,讀(du)端存在。
有(you)空間:可使用write向管道中(zhong)寫入內容,返回實際寫入的字節數。
空間(jian)不足:有(you)多少寫多少,沒(mei)寫完的阻塞(sai)等(deng)待,直到其他(ta)進程(cheng)將管道中數據讀(du)走,才繼續寫入數據。可寫一個程(cheng)序來測(ce)試無名管道的大(da)小。(64K)
 
(2) 無讀(du)端,所有進程(cheng),寫端都關(guan)閉了。
沒(mei)有讀(du)端的時候,想(xiang)寫管道,會得到內核給的SIGPIPE信號。管道破裂(lie)。
管道讀端不(bu)(bu)存(cun)在的時(shi)候,內(nei)核是不(bu)(bu)允許向管道內(nei)寫(xie)入數據的。以下程序能(neng)夠驗證:
 

