無名管道:
無名管道建立: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 型陣列的首位址,其存放了管道的檔...