linux有名管道的使用主要涉及到unlink,mkfifo,read,write,close這幾個函式。此處主要討論下關於o_nonblock標誌的影響。函式手冊中說道此標誌決定是否阻塞讀,寫操作。我的初步理解是此標誌會影響read/write的操作。但是,實際情況好像並不是這樣。通過下面的程式和執行結果就可以看到。
#include下面是執行結果:#include
#include
#include
#include
#include
#include
#include
#include
int main() pid = fork(); if(pid > 0) else if(pid == 0) } /unistd>
in the child
in the father
《此處無停頓》
file id is 3please enter msg
《輸入》hello world!<\n>
write ok
《如果從 in the father之後到此處未滿10秒,則停頓到10秒,若超過時間則直接列印下面的內容》
read bytes 13
the text is
hello world!<\n>
但是,如果將原始碼的29行與30行的順序交換。則運**況就非常不一樣了!
執行時,會在上面的執行結果「in the father"之後停頓10秒,然後才會列印file id is 3 和 please enter msg的資訊。
原因是在源程式中未使用o_nonblock選項。由此看出o_nonblock選項不是阻塞的read/write。他的作用是阻塞open。當以只寫方式開啟,且沒有另外的程序以讀的方式開啟時,那麼這個open就會被阻塞。直到有程序以讀操作的方式開啟這個fifo。從執行的表面情況是這樣。不知是否正確!希望大俠們多指點!
linux 有名管道(FIFO)
管道的緩衝區是有限的 管道制存在於記憶體中,在管道建立時,為緩衝區分配乙個頁面大小 管道所傳送的是無格式位元組流,這就要求管道的讀出方和寫入方必須事先約定好資料的格式,比如多少位元組算作乙個訊息 或命令 或記錄 等等 多個寫程序,乙個讀程序。可以參考我之前的部落格 一旦設定了阻塞標誌,呼叫mkfif...
FIFO 有名管道
有名管道相關的關鍵概念 管道應用的乙個重大限制是它沒有名字,因此,只能用於具有親緣關係的程序間通訊,在有名管道 named pipe或fifo 提出後,該限制得到了克服。fifo不同於管道之處在於它提供乙個路徑名與之關聯,以fifo的檔案形式存在於檔案系統中。這樣,即 使與fifo的建立程序不存在親...
管道和FIFO 有名管道 (一)
管道與fifo 管道 由於沒有名字,只能在有共同祖先 有親緣關係 的程序間使用。管道普遍用於shell中,也可以在程式中實現子程序向父程序回傳資訊。fifo 有名管道,可在無親緣關係的程序間使用。以上都使用read write函式訪問。管道由pipe函式建立,提供乙個單向資料流。include in...