管道使用的四種特殊情況!

2021-10-24 07:39:03 字數 683 閱讀 7919

程序之間通訊最簡單的方式:管道通訊

使用管道需要注意以下4種特殊情況(假設都是阻塞i/o操作,沒有設定o_nonblock標誌):

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

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

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

如果有指向管道讀端的檔案描述符沒關閉(管道讀端的引用計數大於0),而持有管道讀端的程序也沒有從管道中讀資料,這時有程序向管道寫端寫資料,那麼在管道被寫滿時再次write會阻塞,直到管道中有空位置了才寫入資料並返回。

管道的這四種特殊情況具有普遍意義。在要講的tcp socket也具有管道的這些特性。

謹記:不用的就關閉;

寫特殊檔案的時候,一定要關心write 的返回值,可能不夠用。

本身沒有方向性,但是讀寫過程有方向;

管道只能進行血緣關係的程序間通訊。

管道使用的四種特殊方式

程序之間通訊最簡單的方式 管道通訊 使用管道需要注意以下4種特殊情況 假設都是阻塞i o操作,沒有設定o nonblock標誌 如果所有指向管道寫端的檔案描述符都關閉了 管道寫端的引用計數等於0 而仍然有程序從管道的讀端讀資料,那麼管道中剩餘的資料都被讀取後,再次read會返回0,就像讀到檔案末尾一...

js預解釋的特殊情況

if num in window console.log num undefined以上例子中執行過程如下 1.預解釋 var num 2.if 條件不成立 3.console.log num undefined 匿名函式之函式表示式 把函式定義的部分當做乙個值複製給變數 某乙個事件 注意比較以下兩...

類模板的使用 特殊情況友元函式

1 類內部宣告友元函式,必須寫成一下形式 template friend a adda a a,a b 2 友元函式實現 必須寫成 template typename t aadd a a,a b 3 友元函式呼叫 必須寫成 a int c4 adda int c1,c2 做不到,b再多也是白搭 練...