使用dup2来pipe道

如何使用dup2执行以下命令?

ls -al | grep alpha | more 

Solutions Collecting From Web of "使用dup2来pipe道"

前两个命令的一个小例子。 您需要使用pipe()函数创建一个管道,该函数将在ls和grep之间以及grep和more之间的其他管道之间移动。 dup2所做的是将文件描述符复制到另一个文件描述符中。 管道通过将fd [0]中的输入连接到fd [1]的输出来工作。 你应该阅读管道和dup2的手册页。 如果你还有其他的疑问,我可以试着简化这个例子。

 #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <errno.h> #define READ_END 0 #define WRITE_END 1 int main(int argc, char* argv[]) { pid_t pid; int fd[2]; pipe(fd); pid = fork(); if(pid==0) { printf("i'm the child used for ls \n"); dup2(fd[WRITE_END], STDOUT_FILENO); close(fd[WRITE_END]); execlp("ls", "ls", "-al", NULL); } else { pid=fork(); if(pid==0) { printf("i'm in the second child, which will be used to run grep\n"); dup2(fd[READ_END], STDIN_FILENO); close(fd[READ_END]); execlp("grep", "grep", "alpha",NULL); } } return 0; } 

你也可以使用pipe(2,3p) 。 创建管道,分叉,将管道的适当的一端复制到孩子的FD 0或FD 1上,然后执行。