程序間通訊 命名管道

2021-08-08 14:42:11 字數 610 閱讀 4394

命名管道,和匿名管道,有了自己的名字,有了名字就可以操作。所以他不在侷限於有血緣關係的兩個程序之間,適用於任意的兩個程序。

實際上和匿名管道一樣是一塊核心中的快取,和匿名管道不一樣的是,他在檔案系統中多了檔案,而匿名管道的檔案只存在與記憶體中,但是命名管道的檔案雖然存在,有在核心資料結構中有自己的環境,但是在核心中的結點並沒有存在資料塊,資料的資訊和快取是同步的。

特性:簡單,在任意兩個程序裡想要通訊的時候,只要使用操作檔案的方式就可以(提前建立乙個fifo檔案)

讀寫操作:

還沒有建立起來乙個完整管道時,呼叫read會阻塞。

還沒有建立起來乙個完整管道時,呼叫write會阻塞。

建立起來後,關閉讀端,寫write,會有sigpipe訊號。

建立起來後,關閉寫端,讀read,會返回0表示讀完了。

完整的管道時,往已滿的管道寫會阻塞。

完整的管道時,讀已空的管道時會阻塞。

建立fifo檔案的函式:

int mkfifo(const char*pathname,mode_t mode);

指定路徑和許可權建立乙個fifo檔案,成功返回0,失敗返回-1,並且設定erron。

使用檔案的操作去使用fifo檔案,實現通訊。

程序間通訊 命名管道

程序間通訊的本質是不同的程序看到了同乙份公共的資源。而管道的 乙個不 足之處是沒有名字,因此,只能 用於具有親緣關係的程序間通訊,在命名管道 named pipe或fifo 提出後,該限制得到了克服。fifo不同於管道之處在於它提供 乙個路徑名與之關聯,以fifo的 檔案形式儲存於 檔案系統中。命名...

程序間通訊 命名管道

命名管道 命名管道是乙個存在於檔案系統的乙個特殊檔案,命名管道和匿名管道區別 建立命名管道 從命令列建立 mkfifo filename 在程式中建立 函式原型 int mkfifo const char filename,mode t mode 返回值 成功返回 如果檔案已經存在返回 errno為...

程序間通訊 命名管道

規定建立命名管道的程式是服務端 本程式服務端負責接收資料並列印 include include bool server dword dwread 0 建立雙向管道 handle hpipe createnamedpipea pipe hambaga pipe access duplex,pipe t...