这个程序用无名管道实现命令 cat /etc/passwd | grep root
其实在终端命令中 | 就是一个管道 cat /etc/passwd会把结果打印到标准输出 ,grep root 会把结果从标准输入
实现流程:
1.父进程生产两个子进程(进程扇的概念)
2.子进程A:
a: 把标准输出定位到管道写端,因为此时cat /etc/passwd的结果原本要输出到标准输出,这里我们必须定位到管道写段,相
当与执行cat /etc/passwd后就往管道写入了数据
b: 调用execvp执行 cat /etc/passwd命令
3.子进程B:
a: 把标准输入重定向到管道读端,因为原本 grep root 会从标准输入读取数据,这里需要重定向到管道读端去读取数据
b: 调用execvp执行 grep root 从管道读端读取数据,并显示在标准输出上
其源码如下:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
char *cmd1[3]={"/bin/cat","/etc/passwd",NULL};
char *cmd2[3]={"/bin/grep","root",NULL};
int main(void)
{
int fd[2];
if(pipe(fd)<0){
perror("pipe error");
exit(1);
}
int i=