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的终止状态。