管道使用的四種特殊方式

2021-07-15 02:50:13 字數 775 閱讀 5947

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

使用管道需要注意以下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,就像讀到檔案末尾一...

v for的四種使用方式

在vue中使用v for遍歷陣列時v for最常見的一種使用方式。1 先在data中定義陣列 arr 1 2,3 4,5 2 在標籤中遍歷 for item,index in arr 數值 索引 物件陣列,其實說到底也是陣列,使用方式上和陣列一模一樣。1 先在data中定義陣列 objarr 2 在...

四種定址方式

直接在指令中給出運算元,不需要儲存單元,執行速度快,但是顯然資料也不能冗長,通用型性差,一般用來指定一些要求不高的整形整數。運算元 於暫存器,結果也寫回暫存器。顯然這個主要用到暫存器,這也是他的名字的由來。指令給出有效位址,這使得位址碼會很長,通用性也差。指令中給出的是運算元位址的位址,顯然就是要根...