私の先生は、オペレーティング システムのクラスで勉強するための練習問題を私たちに与えました。課題は、3 つのプロセスをまとめてパイプし、タイトルのコマンドを一度に実装することでした。これらのコマンドは、実装時にのみ使用できます。
dup2()
one of the exec()
fork()
pipe()
close()
2 つを一緒にパイプすることはできますが、3 つを行う方法がわかりません。誰かがそれを行う方法を教えてくれるか、少なくとも正しい方向に向けてくれますか?
これまでの私のコードは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int pfd[2];
int pfdb[2];
int pid;
if (pipe(pfd) == -1) {
perror("pipe failed");
exit(-1);
}
if ((pid = fork()) < 0) {
perror("fork failed");
exit(-2);
}
if (pid == 0) {
close(pfd[1]);
dup2(pfd[0], 0);
close(pfd[0]);
execlp("ps", "ps", "-ef", (char *) 0);
perror("ps failed");
exit(-3);
}
else {
close(pfd[0]);
dup2(pfd[1], 1);
close(pfd[1]);
execlp("grep", "grep", "darrowr", (char *) 0);
perror("grep failed");
exit(-4);
}
exit(0);
}
どんな助けでも大歓迎です。それを完了する方法に関するチュートリアルは素晴らしいでしょう!