[Linux]管道的建立和使用

1、管道由函數pipe建立,只能提供單向的數據傳遞的數據傳送。shell

格式:函數

#include <unistd.h>blog

int pipe(int fd[2]);進程

fd爲兩個文件描述符:fd[0]用來讀,fd[1]用來寫。ip

1.父子進程的單向通訊方式以下圖:get

image

一個進程建立一個管道——>派生一個自身的拷貝——>父進程關閉管道的讀出端,子進程的寫入端關閉(上圖中的虛線)——>父子進程就創建了單向通訊了。it

2.父子進程的雙向通訊方式以下圖:pip

image

建立管道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的終止狀態。

相關文章
相關標籤/搜索