關于pipe的(de)使用
時間:2014-06-19 來源:未知
Pipe就是(shi)咱(zan)們常說(shuo)的無(wu)名管(guan)道,是(shi)進(jin)程間通(tong)信方式的一種。在(zai)使用pipe進(jin)行進(jin)程間通(tong)信時,需要熟悉他(ta)的特(te)點及(ji)使用規則。
無(wu)名管道具有(you)如下(xia)的特點:
1、只能用于具有親緣關系的進程之間。
2、半雙工(gong)的(de)通信模式,具有固定的(de)讀端和寫(xie)端。
3、管(guan)道(dao)可以(yi)(yi)看成是一種(zhong)特殊(shu)的(de)文(wen)件(jian),對于它的(de)讀寫(xie)可以(yi)(yi)使用文(wen)件(jian)IO如(ru)read、write函數。
4、管(guan)(guan)道是基于(yu)文(wen)件描述符的(de)通信方式(shi)。當(dang)一個管(guan)(guan)道建立時,它會創建兩(liang)個文(wen)件描述符fd[0]和fd[1]。其中(zhong)fd[0]固定用于(yu)讀管(guan)(guan)道,而fd[1]固定用于(yu)寫(xie)管(guan)(guan)道。

關于(yu)管道(dao)在讀寫的(de)時候需要注(zhu)意以下幾(ji)點:
1、讀:
(1)有寫端,至少有一個(ge)進(jin)程,有寫端存在
有數(shu)據:使用read可以讀到pipe中的數(shu)據,返(fan)回實際讀取的字節數(shu)
無數據(ju):阻塞(sai),等(deng)待其他進程(cheng)向(xiang)管道寫入數據(ju)。
(2)無寫端,所有進程,寫端都(dou)關閉了(le)。
有數(shu)(shu)據:使用read可以(yi)讀到pipe中(zhong)的(de)數(shu)(shu)據,返回實際讀取的(de)字節(jie)數(shu)(shu)
無數據:無寫端意味著(zhu)所有(you)的寫描述符關閉了(le),不會向管(guan)道(dao)中寫入(ru)數據了(le),會立刻返回(hui)0.
2、寫:
(1)有讀(du)端,至少有一個進程(cheng),讀(du)端存在。
有空間:可使(shi)用write向管道中寫入內(nei)容,返回(hui)實際寫入的字節數。
空間不足:有(you)多(duo)少(shao)(shao)寫多(duo)少(shao)(shao),沒寫完(wan)的(de)阻塞(sai)等待(dai),直到其他(ta)進程將管道(dao)中(zhong)數據讀走,才繼續寫入數據。
(2)無讀(du)端(duan),所(suo)有進(jin)程,寫端(duan)都關閉了(le)。
沒(mei)有(you)讀端的時候,想(xiang)寫管道,會得到內核給的SIGPIPE信號(hao)。管道破裂(lie)。
管道(dao)讀端不存在的時(shi)候,內核是不允(yun)許(xu)向管道(dao)內寫入數據的。
Pipe創建之后,在(zai)內核中(zhong)。當所(suo)有的讀端和寫(xie)端都關(guan)閉的時(shi)候,pipe將被釋放掉