程序間通訊 管道

2021-08-09 08:36:06 字數 458 閱讀 9097

當管道為空時: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 只能在具有公共祖先的程序之間使用。乙個管道由乙個程序建立,然後該...