Linux程序間通訊之 管道和命名管道

2021-09-23 20:47:57 字數 1306 閱讀 1676

int pipes[2],pid;

res = pipe(pipes);

pid = fork();

通過pipe函式建立的這兩個檔案描述符 fd[0] 和 fd[1] 分別構成管道的兩端,往 fd[1] 寫入的資料可以從 fd[0] 讀出。並且fd[1] 一端只能進行寫操作,fd[0] 一端只能進行讀操作,不能反過來使用。要實現雙向資料傳輸,可以使用兩個管道。

特點:適用於:子程序與子程序  父程序和子程序。

生命週期:跟隨程序。

父程序和子程序都是從fd[0]讀,fd[1]寫。

沒有名字

通訊資料需要複製4次。?【個人解釋:深入理解linux核心,書籍772中。管道是作為vfs物件來實現的,沒有對應的磁碟物件,並且將pipe物件組織為pipefs檔案系統,並且該檔案系統沒有安裝點,所以使用者看不到。使用者使用read/write產生的資料轉移:】【求指點,為什麼是四次

管道最大的劣勢就是沒有名字,只能用於有乙個共同祖先程序的各個程序之間。fifo代表先進先出,單它是乙個單向資料流,也就是半雙工,和管道不同的是:每個fifo都有乙個路徑與之關聯,從而允許無親緣關係的程序訪問。

#include int mkfifo(const char *fifo_name, mode_t mode);

pipe_fd = open(fifo_name, open_mode);

特點:

fifo是一種檔案型別

fifo管道是先呼叫mkfifo建立,然後再用open開啟得到fd來使用.

在開啟fifo時要注意,它是全雙工的乙個程序寫模式開啟管道的時候,必須有另乙個程序以讀模式開啟;或讀模式的時候,必須有另乙個程序寫寫模式開啟,否則該程序open函式阻塞,直到滿足以上關係。

生存週期:建立的命名管道一直存在於系統中,除非顯示的刪除該管道檔案。

用途:fifo由shell命令使用以便將資料從一條管道線傳送到另一條,為此無需建立中間臨時檔案。

fifo用於客戶程序-伺服器程序應用程式中,以在客戶程序和伺服器程序之間傳送資料。

fifo索引節點出現在系統的目錄樹中,而不是pipefs特殊檔案系統中

fifo是一種雙向通訊管道,也就是說,可能以讀/寫模式開啟乙個fifo

linux程序間通訊之管道通訊

一 命名管道通訊 管道通訊分為 無名管道和有名管道 無名管道是用於父子孫程序,之間有血緣關係 有名管道 用於任意兩個程序 無名管道 1 建立 int pipe int filedis 2 它會建立兩個檔案描述符 filedis 0 用於讀管道 filedis 1 用於寫管道 通常先建立乙個管道,再通...

linux程序間通訊之管道

下面幾節,將分別溫習下linux程序進通訊的幾種機制1 管道 管道是比較古老的程序間的通訊方式。主要有有名管道和無名管道兩種。2 無名管道 它的特點就是 1 只能使用在具有親緣關係的程序之間的通訊 父子程序或者兄弟程序之間 因為只有具有親緣關係的程序才能繼承其建立的檔案描述符。2 是乙個半雙工的通訊...

Linux程序間通訊之管道

管道,你可以把它想成一根資料線,連線了兩個程序,使他們可以互相通訊。更嚴謹來說,它是乙個檔案或者一塊共享區,乙個程序往裡面寫資料,另乙個程序從裡面拿資料,以此種方式完成程序間通訊。管道是unix系統ipc最古老的形式,所有的unix系統都提供此種通訊機制 unix系統ipc是各種程序通訊方式的統稱 ...