Linux下的無名管道pipe的設計

2021-08-27 16:59:01 字數 1230 閱讀 4147

1. 函式說明

pipe(建立管道):

1) 標頭檔案 #include

2) 定義函式: int pipe(int filedes[2]);

3) 函式說明: pipe()會建立管道,並將檔案描述詞由引數filedes陣列返回。

filedes[0]為管道裡的讀取端

filedes[1]則為管道的寫入端。

4) 返回值: 若成功則返回零,否則返回-1,錯誤原因存於errno中。

錯誤**:

emfile 程序已用完檔案描述詞最大量

enfile 系統已無檔案描述詞可用。

efault 引數 filedes 陣列位址不合法。

示例:

root@wl-ms-7673:/home/wl/桌面/c++# cat -n pipe_test.cpp 

1 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 /*

10 * 程式入口

11 * */

12 int main()

13 28

29 /*建立子程序*/

30 if((pid=fork())==0) //子程序執行序列

31

39 close(pipe_fd[0]);

40 exit(0);

41 }

42 else if(pid>0) //父程序執行序列

43

53 return 0;

54 }

55 56

root@wl-ms-7673:/home/wl/桌面/c++# g++ pipe_test.cpp -o pipe_test

root@wl-ms-7673:/home/wl/桌面/c++# ./pipe_test

parent write1 hello!

parent write2 pipe!

10 numbers read from the pipe is hello pipe

root@wl-ms-7673:/home/wl/桌面/c++#

無名管道的建立是在fork建立前,通過pipe()建立管道,然後通過fork建立子程序,之後,子程序會拷貝父程序的**段/資料段及堆疊段,因此,建立的管道會被複製乙份,子程序乙份,父程序乙份,為了使管道正常通訊,必須處理已有管道。

無名管道pipe

管道是unix系統ipc的最古老形式,所有的unix系統都支援這種通訊機制。有兩個侷限性 1 支援半雙工 2 只有具有親緣關係的程序之間才能使用這種無名管道 pipe函式 功能 建立無名管道 函式原型 include int pipe int filedes 2 引數經由引數filedes返回兩個檔...

無名管道(pipe)通訊

這個程式用無名管道實現命令 cat etc passwd grep root 其實在終端命令中 就是乙個管道 cat etc passwd會把結果列印到標準輸出 grep root 會把結果從標準輸入 實現流程 1.父程序生產兩個子程序 程序扇的概念 2.子程序a a 把標準輸出定位到管道寫端,因為...

無名管道(PIPE)與 有名管道(FIFO)

更多資料 我的目錄 1 無名管道的建立 標頭檔案 include 函式原型 int pipe int pipefd 2 引數 pipefd 乙個至少具有兩個int型資料的陣列 pipefd 0 讀端的檔案描述符,只能讀取管道中的資訊 pipefd 1 寫端的檔案描述符,只能往管道中寫入資訊 返回值 ...