無名管道和有名管道

2021-08-10 03:12:32 字數 1209 閱讀 2702

無名管道:

無名管道建立:int pipe(int filedis[2]);

當乙個管道建立時,它會建立兩個檔案描述符:

filedis[0] 用於讀管道,

filedis[1] 用於寫管道

管道用於不同程序間通訊。通常先建立乙個管道,再通過fork函式建立乙個子程序,該子程序會繼承父程序所建立的管道

有名管道:

有名管道又稱為fifo,是程序間通訊的一種方式。fifo具有以下特點:

1.全雙工的通訊模式,資料先進先出;

2.可以用於任意的程序之間,通過指定相同的管道檔案進行通訊;

3.檔名存在檔案系統中,而管道中的內容存在於記憶體中。可通過open、read、write對其操作;

雖然fifo檔案存在於檔案系統中(可供不同的程序開啟),但fifo中的內容都存放在記憶體中,所以檔案大小始終為0。

最後總結一下在使用fifo時要注意的問題:

1. 在用open開啟fifo時有可能會阻塞,原因就是當前只有讀端或寫端存在。換句話說,如果程式在開啟fifo時指定了唯讀方式/只寫方式,那麼該進

程對於開啟的fifo來說就是乙個讀端/寫端。如果指定的是讀寫方式,那麼程序既是讀端又是寫端。

2. 從fifo中讀資料時(用read函式),如果沒有資料,預設是阻塞等待,直到有資料被寫入fifo。如果read函式返回0,說明該fifo所有的寫端都已關

閉,程式要做相應的處理。

向fifo寫入資料時(使用write函式),如果fifo有足夠空間,write函式會返回寫入的位元組數;如果空間不夠,write函式會阻塞,直到寫完為止。當所

有的讀端都關閉時,再向fifo寫資料會出錯。核心會向寫程序發管道斷裂的訊號(sigpipe), 從而終止該程序。處理的辦法有兩種:程式以讀寫方式開啟

fifo或是在程式中捕捉sigpipe訊號,由使用者自行處理。

fifo

檔案在使用上和普通檔案有相似之處,但是也有不同之處:

ø  讀取fifo檔案的程序只能以」rdonly」方式開啟fifo檔案。

ø  寫fifo檔案的程序只能以」wronly」方式開啟fifo

ø  fifo

檔案裡面的內容被讀取後,就消失了。但是普通檔案裡面的內容讀取後還存在。

管道 無名管道 和FIFO 有名管道

管道是最初的unixipc形式,但是因為管道沒有名字,所以它們只能用於有親緣關係的程序使用 進而有名管道 fifo 應運而生,有名管道有乙個路徑名與之關聯,所以允許無親緣關係的程序訪問同乙個fifo。以下具體介紹管道 管道的建立 管道由函式 int pipe int fd 2 建立,提供乙個單向資料...

無名管道和有名管道區別

管道 無名管道 1 管道通訊的原理 核心維護的一塊記憶體,有讀端和寫端 管道是單向通訊的 2 管道通訊的方法 父程序建立管理後fork子程序,子程序繼承父程序的管道fd 3 管道通訊的限制 只能在父子程序間通訊 半雙工 4 管道通訊的函式 pipe write read close 有名管道 fif...

無名管道和有名管道的特性,特點

程序間通訊之管道 管道 無名管道 無名管道的建立和使用函式 標頭檔案 include 函式int pipe int filedes 2 int pipe int filedes 2 功能 經由引數 filedes 返回兩個檔案描述符 引數 filedes 為 int 型陣列的首位址,其存放了管道的檔...