簡體   English   中英

父/子fork()和C中的管道

[英]Parent/Child fork() and pipes in C

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

任何幫助都會很棒

無法保證您正在創建的派生流程的執行順序。 這意味着您無法真正關閉管道。 為此,您需要添加一些同步,以確保您必須等待使用管道的所有進程完成,然后在最后一個活動的進程中關閉它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM