無名管道(pipe)
有名管道(fifo)//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出錯
上面無名管道的基本應用中會關閉一端,這樣是為什麼?//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傳送了資料...