Я знаю, как создать один канал в Linux с C, который выглядит как cat /tmp/txt |grep foo
, но у меня есть проблемы с реализацией нескольких связанных каналов, таких как cat /tmp/1.txt | uniq -c | sort
. Как сделать это с C, используя pipe()
в Linux?
ОБНОВЛЕНИЕ: Я понял это. Вот код, если у кого-нибудь когда-нибудь возникнет тот же вопрос:
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);