當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 關(guān)于管道使用規(guī)則的總結(jié)
中進(jìn)程間通信方式中,有一種為無名管道。對管道的讀寫操作需要注意以下的使用規(guī)則:
1、當(dāng)讀的時候:
(1) 有寫端,至少有一個進(jìn)程,有寫端存在
有數(shù)據(jù):使用read可以讀到pipe中的數(shù)據(jù),返回實(shí)際讀取的字節(jié)數(shù)
無數(shù)據(jù):阻塞,等待其他進(jìn)程向管道寫入數(shù)據(jù)。
(2) 無寫端,所有進(jìn)程,寫端都關(guān)閉了。
有數(shù)據(jù):使用read可以讀到pipe中的數(shù)據(jù),返回實(shí)際讀取的字節(jié)數(shù)
無數(shù)據(jù):無寫端意味著所有的寫描述符關(guān)閉了,不會向管道中寫入數(shù)據(jù)了,會立刻返回0.
2、 當(dāng)寫的時候:
(1) 有讀端,至少有一個進(jìn)程,讀端存在。
有空間:可使用write向管道中寫入內(nèi)容,返回實(shí)際寫入的字節(jié)數(shù)。
空間不足:有多少寫多少,沒寫完的阻塞等待,直到其他進(jìn)程將管道中數(shù)據(jù)讀走,才繼續(xù)寫入數(shù)據(jù)。可寫一個程序來測試無名管道的大小。(64K)
(2) 無讀端,所有進(jìn)程,寫端都關(guān)閉了。
沒有讀端的時候,想寫管道,會得到內(nèi)核給的SIGPIPE信號。管道破裂。
管道讀端不存在的時候,內(nèi)核是不允許向管道內(nèi)寫入數(shù)據(jù)的。以下程序能夠驗(yàn)證:
华清图书馆
0元电子书,限时免费申领10本华清图书PDF版
扫码关注华清远见公众号