linux 程序間通訊 管道

2021-10-07 23:58:44 字數 832 閱讀 4336

無名管道(pipe)

//1. 建立乙個有兩個元素的一維陣列 	

int pipe[2]

;//2. 使用pipe或pipe2函式將陣列變為無名管道 if(

0==pipe

(pipe)

)//(pipe[0]--讀,pipe[1]--寫)

//3. 建立乙個子程序

pid_t pid =

fork()

;//4. 子程序和父程序按需要關閉其中一端

if(pid ==0)

//子程序

else

if(pid >0)

//父程序

}else

//fork出錯

有名管道(fifo)

//1. 定義乙個有效檔案路徑

char

*path =

".";

//當前目錄路徑

//2. 建立有名管道fifo

mkfifo

(path,

0644);

//3. 開啟有名管道

int fd =

open

(path, flag)

;

上面無名管道的基本應用中會關閉一端,這樣是為什麼?

是無名管道不能雙向通訊嗎? 可以!子程序和父程序既可以通過乙個無名管道讀也可以寫。

那為什麼用關閉一端呢?

a. 因為無名管道的讀端和寫端用的是一塊記憶體;

b. 子程序寫進去的內容也可能被子程序讀出來;

c. 如果子程序和父程序同時讀,這可能會同時阻塞在讀上,從而造成死鎖。

Linux程序間通訊 管道

linux程序間通訊機制 1.同一主機程序間通訊機制 unix方式 有名管道fifo 無名管道pipe 訊號signal systemv方式 訊號量 訊息佇列 共享記憶體 2.網路通訊 rpc remote procedure call socket 管道管道是程序間通訊中最古老的方式,它包括無名管...

Linux程序間通訊 管道

管道 管道是一種最基本的程序間通訊機制,由pipe函式建立 include intpipe int filedes 2 呼叫pipe函式時在核心中開闢一塊緩衝區 稱為管道 用於通訊,它有乙個讀端乙個寫端,然後通過filedes引數傳出給使用者程式兩個檔案描述符,filedes 0 指向管道的讀端,f...

Linux 程序間通訊 管道

程序間通訊 a程序怎樣將 hello world 傳遞給b程序 i 利用檔案實現 需要乙個 中間人 進行傳遞 檔案 在磁碟中儲存 a先呼叫open函式開啟檔案,再用write函式寫檔案,b用read函式讀取檔案,但問題如下 1.如果a傳送了資料b進行了接收,但a的資料沒有被清空 2.如果a傳送了資料...