Linux IPC程序間通訊 一 管道

2021-10-06 06:41:54 字數 2146 閱讀 5842

系列文章:

linux ipc程序間通訊(一):管道

linux ipc程序間通訊(二):共享記憶體

linux ipc程序間通訊(三):訊號量

linux ipc程序間通訊(四):訊息佇列

linux程序間通訊(ipc)的乙個重要方法就是管道,在學習管道之前,要理解兩個概念

不論是無名管道還是有名管道,都屬於半雙工管道,理解這一點非常重要。

void

test1()

;while

(fread

(buf,

sizeof

(char),

sizeof

(buf)

, fp)

) cout << buf;

cout << endl;

pclose

(fp)

;//寫

char buf2=

; file *fp2 =

popen

("wc -w"

,"w");

fwrite

(buf2,

sizeof

(char),

sizeof

(buf2)

, fp2)

;pclose

(fp2)

;}

注意

無名管道中的read函式會進行阻塞。

因為pipe()函式只能建立出半雙工管道,所以fds[0]只能讀,fds[1]只能寫

案例:建立乙個無名管道 與 父子程序,進行父寫子讀

void

test2()

;pipe

(fds)

;//fds[0] = 3, fds[1] = 4;if(

fork()

==0);

read

(fds[0]

, buf,

sizeof

(buf));

cout <<

"child process reading:"

<< buf << endl;

close

(fds[0]

);exit(0

);}close

(fds[0]

);char buf[

100]

="helloworld"

;write

(fds[1]

, buf,

strlen

(buf));

cout <<

"father process is writing"

<< endl;

close

(fds[1]

);wait

(null);

}

命名管道比起無名管道,即便不是親屬程序也能夠進行程序間通訊

另外,命名管道可以作為檔案存在。

需要使用mkfifo命令建立命名管道

命名管道:讀寫操作案例

分別建立好讀端寫端, 並設定退出機制

注意:如果沒有設定退出機制,那麼read端 將會預設一直在接收 0 個字元,讀端將會一直列印空字串

寫端 (write.cpp)

int

main()

;while(1

)return0;

}

讀端(read.cpp):

int

main()

;int ret;

while(1

) cout <<

"ret = "

<< ret << endl;

cout <<

"buf = "

<< buf << endl;

}return0;

}

通過以上程式,可以實現一端寫,一段讀的案例。

程序間通訊(一) 管道

一,用管道進行父子程序通訊 include include define maxline 120 define msginfo hurry up n int main void pid t pid if pipe fd 0 if pid fork 0 if pid 0 father write st...

Linux程序間通訊(一)管道

乙個程序在管道的尾部寫入資料,另乙個程序從管道的頭部讀出資料。管道包括無名管道和有名管道兩種,前者只能用於父程序和子程序間的通訊,後者可用於執行於同一系統中 的任意兩個程序間的通訊。管道通訊 特點 管道通訊是單向的,有固定的讀端和寫端。資料被程序從管道讀出後,在管道中該資料就不存在了。當程序去讀取空...

IPC程序間通訊 一 管道

ipc inter process communication 管道 訊號 共享記憶體 訊息佇列 資訊量 套接字 管道分為 無名 匿名 管道和有名 命名 管道 區別 缺點 侷限於父子程序間的通訊且會發生阻塞 fcntl 步驟建立 pipe 函式原型 int pipe int filedes 2 引數...