我知道如何用C语言在Linux中创建一个管道,看起来像
更新:我已经解决了这个问题。如果有人有同样的问题,这里是代码:
cat /tmp/txt | grep foo
,但我在实现多个链接的管道时遇到了问题,例如cat /tmp/1.txt | uniq -c | sort
。如何使用Linux中的pipe()
函数来实现呢?更新:我已经解决了这个问题。如果有人有同样的问题,这里是代码:
enum PIPES {
READ, WRITE
};
int filedes[2];
int filedes2[2];
pipe(filedes);
pipe(filedes2);
pid_t pid = fork();
if (pid == 0) {
dup2(filedes[WRITE], 1);
char *argv[] = {"cat", "/tmp/1.txt", NULL};
execv("/bin/cat", argv);
exit(0);
}
else {
close(filedes[1]);
}
pid = fork();
if (pid == 0) {
dup2(filedes[READ], 0);
dup2(filedes2[WRITE], 1);
char *argv[] = {"uniq", "-c", NULL};
execv("/usr/bin/uniq", argv);
}
else {
close(filedes2[1]);
}
pid = fork();
if (pid == 0) {
dup2(filedes2[READ], 0);
char *argv1[] = {"sort", NULL};
execv("/usr/bin/sort", argv1);
}
waitpid(pid);