在linux系統中,管道是將乙個兩個程序之間的標準輸入與標準輸出連線起來的機制,以半雙工的方式工作(將乙個程序的輸出與另乙個程序的輸入連線起來的單向通訊)。
對管道的讀寫與一般的i/o系統函式一致,但不支援某些特定的i/o操作,例如lseek()。
函式原型
int pipe(int pipefd[2])
標頭檔案引數
描述pipefd
建立的管道檔案描述符,pipefd[0]:讀端;pipefd[1]:寫端。
返回值成功:0,失敗:-1
函式原型
int pipe2(int pipefd[2], int flags)
標頭檔案引數
說明pipefd
建立的管道檔案描述符
flags
管道對應的屬性標誌
返回值成功:0,失敗:-1
flags:
0:同pipe();
o_nonblock:設定建立的兩個檔案描述符的非阻塞屬性;
o_cloexec:close on exec.
管道的資料量限制:pipe_buf,在limits.h中定義(不同的核心版本會有所不同)。
#include#include#includeint main()
char read_buff[1024] = ;
char write_buff[10240] = "hello, pipe.";
pid_t pid = fork();//建立執行緒分支
if(0 > pid)
if(0 == pid)} }
else
std::cout << "recv amount: " << nbytes << " recv data: " << read_buff << std::endl;}}
return 0;
}
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傳送了資料...