程序間通訊之有名管道

2021-08-20 23:17:02 字數 742 閱讀 2405

相對於無名管道而言,有名管道當然是有名字的,這樣就可以使任何程序通過檔名或路徑名與該管道掛鉤。所以,有名管道可用於任意兩程序之間的通訊。

就有名管道和無名管道的實現來說,主要是在開啟方式上有所不同,管道檔案一旦開啟(建立),以後兩者對管道檔案的讀、寫和關閉操作相同。

int open (const char *path, int flags);
那麼,下面就來說一說有名管道的開啟方式:

以 o_rdonly 方式開啟

1) 如果管道的寫端已經開啟,則喚醒寫端程序,完成有名管道的建立,然後,讀端程序和寫端程序返回各自使用者空間;

2) 管道的寫端尚未開啟

(a) 標誌位 o_nonblock 為1,不加等待,立即返回;

(b) 標誌位 o_nonblock 為 0,讀端程序進入睡眠,等待寫端程序開啟寫端以完成有名管到的建立。

2. 以 o_wronly 方式開啟

1) 管道的讀端已經開啟,若當前程序是第一次開啟該有名管到寫端的程序,就要負責喚醒在睡眠中等待的讀端程序;

2) 讀端尚未開啟

(a) 標誌位 o_nonblock 為 1,寫端開啟失敗,釋放已經分配的各種資源,返回;

(b) 標誌位 o_nonblock 為 0,寫端程序進入睡眠,等待某個程序開啟讀端才能返回。

3. 以 o_rdwr 方式開啟

相當於有同一程序開啟了有名管道的兩端,所以不需要等待,只需喚醒某個開啟了寫端或讀端而正在睡眠中等待的程序。

程序通訊之有名管道

程序通訊之有名管道 一 前言 我們前面部落格講過,父子程序之間,對於檔案操作的檔案操作符是共享的,而對於程序的全域性資料,堆區資料,棧區資料是不共享的,那麼程序之間到底是怎麼進行資訊的傳遞的呢,具體的實現,以及傳遞的過程是怎麼完成的呢,前面我們講過訊號在程序之間的使用,那也是一種程序之間資訊的傳遞。...

Linux程序通訊之有名管道

1 定義參照前文無名管道 2 特點 1 區別於無名,管道有名管道可以使互不相關的兩個程序通訊 在建立管道時,通過路徑 檔名來進行識別 2 建立有名管道後,程序可以將其作為檔案來進行讀寫 3 先進先出fifo。4 fifo在寫入的資料的位元組數小於或者等於pipe buf時,能夠保證write操作是原...

程序間通訊 有名管道

無名管道,由於沒有名字,只能用於親緣關係的程序間通訊.為了克服這個缺點,提出了有名管道 fifo fifo不同於無名管道之處在於它提供了乙個路徑名與之關聯,以fifo的檔案形式存在於檔案系統中,這樣,即使與fifo的建立程序不存在親緣關係的程序,只要可以訪問該路徑,就能夠彼此通過fifo相互通訊,因...