我需要在我的C代码中实现unix代码,例如PS,WC和grep。我有管道和分叉创建一个孩子来完成代码的每个部分,但是,我对每次需要关闭的进程数量感到有些困惑。到目前为止,这是我的代码,但显然它不起作用,因为权利事项没有被关闭。
int main() {
int pfd[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]);
if (pipe(pdf) == -1) {
perror("pipe failed");
exit(-1);
}
if (pid ==0) {
close(pfd[1]);
dup2(pfd[0], 0);
close(pfd[0]);
execlp("wc", "wc", (char *) 0);
perror("wc failed");
exit(-3);
}
else
close(pfd[1]);
dup2(pfd[0], 0);
close(pfd[0]);
execlp("grep", "grep" "1111", (char *) 0);
perror("grep failed");
exit(-3);
}
else {
close(pfd[0]);
dup2(pfd[1], 1);
close(pfd[1]);
execlp("ps", "ps", "auxj", (char *) 0);
perror("ps failed");
exit(-4);
}
exit(0);
}
任何帮助都会很棒
答案 0 :(得分:0)
无法保证您正在创建的fork'ed进程的执行顺序。这意味着你无法真正关闭管道。为此,您需要添加一些同步,以确保您必须等待所有使用管道的进程完成,然后在最后一个进程中关闭它们。