程序之間通訊最簡單的方式:管道通訊
使用管道需要注意以下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再多也是白搭 練...