/* 使用pipe完成 ps aux | grep bash
************************************************************************/
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char* argv[]){
if(argc<2){
printf("./a.out bash");
exit(1);
}
//创建管道
int fd[2];
int ret = pipe(fd);
if(ret == -1){
perror("pipe error");
exit(1);
}
//创建子进程
pid_t pid = fork();
if(pid == -1){
perror("fork error");
exit(1);
}else if(pid == 0){
//child grep bush r
close(fd[1]);
//将标准输入重定向到管道的读端
dup2(fd[0],STDIN_FILENO);
execlp("grep","grep","--color=auto",argv[1],NULL);
perror("execlp error");
}else{
//parent ps aux w
close(fd[0]);
//将标准输出重定向到管道的写端
dup2(fd[1],STDOUT_FILENO);
execlp("ps","ps","a","u","x",NULL);
//只有execlp失败才会往下执行
perror("execlp error");
//wait(NULL);
}
return 0;
}