我需要在我的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);
}


任何帮助都会很棒

最佳答案

无法保证您正在创建的派生流程的执行顺序。这意味着您无法真正关闭管道。为了做到这一点,您需要添加一些同步,以确保您必须等待使用管道的所有进程完成,然后在最后一个活动的进程中关闭它们。

09-06 20:13