在 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 是...