當管道為空時:read阻塞
當管道為滿時:write阻塞
有名管道(mkfifo fifo):管道檔案在磁碟,寫入管道的資料在記憶體(無名管道不存在)
有名管道和無名管道間的主要區別:
有名管道可以用在任意兩個程序之間,無名管道(pipe)只能用在父子程序之間。
先建立管道,再執行fork();
重定向:用管道的寫端覆蓋標準輸出(dup2(fd[1],1) "1"代表標準輸出)
讀端關閉,寫端寫入資料引發錯誤異常,write執行後產生sigpipe訊號;
寫端關閉,讀端不再阻塞,read返回值為0;
怎樣以非阻塞的方式在管道中讀取資料?
1.在open的時候傳入o_nonblock;
2.按非阻塞的方式開啟:fcntl(fd,f_setfl,o_nonblock);
3.在mode設定o_nonblock;
程序間通訊 管道
include int pipe int fd 2 返回值 若成功,返回0,若出錯,返回 1經由引數fd返回兩個檔案描述符 fd 0 為讀而開啟,fd 1 為寫而開啟。fd 1 的輸出是fd 0 的輸入。else if pid 0 子程序 else else if pid 0 父程序 printf ...
程序間通訊 管道
原文 程序間通訊 管道 管道簡介 常說的管道都是匿名半雙工管道,匿名半雙工管道在系統中是沒有實名的,並不可以在檔案系統中以任何方式看到該管道。它只是程序的一種資源,會隨著程序的結束而被系統清除。管道通訊是在unix系統中應用比較頻繁的一種方式,例如使用grep查詢 ls grep ipc 顧名思義,...
程序間通訊 管道
程序間通訊,又稱為ipc,包含以下型別 半雙工管道fifo 全雙工管道 訊息佇列 訊號 訊號量共享記憶體 套接字socket streams。一,管道是unix系統ipc的最古老形式,他具有兩種侷限性 1 資料只能在乙個方向上流動 2 只能在具有公共祖先的程序之間使用。乙個管道由乙個程序建立,然後該...