私はLinuxでCでcat /tmp/txt |grep foo
のようなパイプを作る方法を知っていますが、このような複数の連鎖パイプを実装するのに問題があります。 Linuxでpipe()
を使用してCでそれを行うには?linuxでpipe()を使ってパイプをつなぎ合わせたもの
更新:私はそれを理解しました。 - さんがa
とb
それらを呼びましょう
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);