1、管道由函數pipe建立,只能提供單向的數據傳遞的數據傳送。shell
格式:函數
#include <unistd.h>blog
int pipe(int fd[2]);進程
fd爲兩個文件描述符:fd[0]用來讀,fd[1]用來寫。ip
1.父子進程的單向通訊方式以下圖:get
一個進程建立一個管道——>派生一個自身的拷貝——>父進程關閉管道的讀出端,子進程的寫入端關閉(上圖中的虛線)——>父子進程就創建了單向通訊了。it
2.父子進程的雙向通訊方式以下圖:pip
建立管道1(fd1[0],fd1[1])和管道2(fd2[0],fd2[1])——>派生出一個子進程——>io
父進程關閉管道1的讀出端(fd1[0])和管道2的寫入端(fd2[1]);stream
子進程關閉管道1的寫入端(fd1[1])和管道2的讀入端(fd2[0])。
【實例】:
2、popen和pclose函數
popen函數用來建立一個管道並啓動另一個進程,該進程能夠向管道中寫入,也能夠向管道中讀出。
格式:
#include <stdio.h>
PLE *popen(const char *command, const char *type);
int pclose(FILE *stream);
poen函數會在調用進程和所指定的命令之間建立一個管道。
pclose函數關閉popen建立的標準I/O流,等待其中的命令終止,而後返回shell的終止狀態。