程序間通訊 管道(半雙工通訊)

2021-09-11 23:03:34 字數 981 閱讀 9273

乙個程序輸出資料到另乙個程序資料輸入的通道。(半雙工通訊:同一時間,只能一端讀另一端寫,因為只有一條通道)

在磁碟上會存在乙個管道檔案標識,但管道檔案不占用磁碟block空間,資料會快取在記憶體上。

可應用於同一臺主機上的有許可權訪問的任意n個程序間通訊。(必須有一對讀寫程序)

有名管道使用:

建立管道檔案:

命令   mkfifo 檔名

函式:int mkfifo(const char * pathname, int mode);

開啟:open();write(); read(); close();

建立管道檔案:

注意:必須有一對讀-寫,唯讀或只寫則會阻塞。

如果所有的讀端關閉,則寫端也會退出,反之亦然。

讀寫的次數沒有直接聯絡。

如果寫端保持但沒有寫資料(管道檔案沒有資料),讀端阻塞。當寫端將記憶體寫滿時,則寫端阻塞。

沒有管道檔案標識,借助父子程序之間共享fork之前開啟的檔案描述符,其資料內容也是在記憶體上快取。(一端寫一端讀)

無名管道的使用:父子程序間通訊

建立&開啟: int 匹配(int fds[2]); 建立無名管道並開啟,使得fds[0]為讀端,fds[1]為寫端;

注意:父子程序必須關閉一對讀寫,並且不能是同乙個程序關閉讀寫;

邏輯保持管道的半雙工通訊,防止一端關閉對應的讀或寫,而另一端無法感知;

程序間通訊 管道

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