Linux 學習筆記15 管道

2021-10-04 20:04:27 字數 1414 閱讀 4202

在 linux ipc (程序間通訊)中,管道通訊又有三種型別,分別為標準流管道,無名管道和有名管道。

file*

popen

(const

char

* command,

const

char

* open_mode)

;int

pclose

(file* fp)

;`

函式 popen():允許乙個程式將另乙個程式作為新程序來啟動,並可以傳遞資料給它或者通過它接收資料。

command 字串是要執行的程式名。

open_mode 必須是「r」或「w」。

如果 open_mode 是「r」,被呼叫程式的輸出就可以被呼叫程式(popen)使用,呼叫程式利 popen 函式返回的 file*檔案流指標,就可以通過常用的 stdio 庫函式(如 fread)來讀取被 呼叫程式的輸出;如果 open_mode 是「w」,呼叫程式(popen)就可以用 fwrite 向被呼叫程式傳送資料,而被呼叫程式可以在自己的標準輸入上讀取這些資料。

popen原理如下:

例:

#include

//標準流管道

//int

main()

;fread

(buf,

sizeof

(char),

sizeof

(buf)

,fp)

;printf

("popen:%s"

,buf)

;pclose

(fp)

;return0;

}

print函式如下:

#include

intmain()

執行效果如下:

#include

intmain()

;read

(fds[0]

,buf,

sizeof

(buf));

printf

("child mark3 buf=%s\n"

,buf)

;exit(0

);}else

}

執行結果如下:

#include

//建立乙個命名管道檔案

intmain

(int argc,

char

*ar**)

執行結果如下:

#include

intmain

(int argc,

char

*ar**)

執行效果如下:

Linux學習筆記(管道)

管道是一種兩個程序見進行單向通訊的機制,因為管道只能對資料進行單向傳遞,所以管道又稱為半雙工管道。管道是linux由unix繼承而來的ipc形式之一。管道分為無名管道與命名管道。管道的特點 1 只能在有親緣關係的程序之間進行通訊 也就是在父子程序之間通訊 2 單向通訊乙個讀端,乙個寫端,如果要雙向通...

Linux學習筆記之 管道

8 管道 8.1 無名管道 無名管道通常直接稱之為管道,它占用兩個檔案描述符,不能被非血緣關係 的程序共享,一般應用在父子程序中 8.2 無名管道的建立 include int pipe int fildes 2 函式pipe在核心中建立乙個管道,並分配兩個檔案描述符標識管道的兩端,這兩個檔案描述符...

Linux學習筆記 管道PIPE

管道 當從乙個程序連線資料流到另乙個程序時,使用術語管道 pipe include int pipe int filedes 2 建立管道 pipe 說明 返回值 0成功,1出錯。如果呼叫成功,則程序此時由了兩個額外的開啟檔案描述符,filedes 0 中的值是管道的讀取端,而filedes 1 是...