簡體   English   中英

沒有結果!! 使用fork()在dup2的2個管道上運行execlp()

[英]no result!! using fork() to run execlp() with 2 pipes using dup2

我正在編寫一個將運行Linux命令的C程序,例如:
cat /etc/passwd | grep list | cut -c 1-5
我沒有任何結果
*這里父母等待第一個孩子(child_pid)完成;
第一個孩子等第二個孩子!
任何想法?
代碼:

main()
{
    pid_t child_pid;
    int fd[2];
    int pfd[2];
    pipe(pfd);
    child_pid = fork ();

    if (child_pid != 0) 
    {
        wait(child_pid);
        close(pfd[1]);
        dup2(pfd[0],0);
        close(pfd[0]);
        execlp("cut","cut","-c","1-5",NULL);
    }
    else
    {
        pid_t pfils = fork();
        pipe(fd);

        if(pfils == 0)
        {
            close(fd[0]);
            dup2(fd[1],1);
            close(fd[1]);
            execlp("cat", "cat","/etc/passwd",NULL);
        }
        else
        {
            wait(pfils);
            close(fd[1]);
            dup2(fd[0],0);
            close(fd[0]);
            close(pfd[0]);
            dup2(pfd[1],1);
            close(pfd[1]);
            execlp("grep","grep","list",NULL);
        }
    }
}
    pid_t pfils = fork();
    pipe(fd);

Fork將復制該過程。 流程的獨立副本。 因此,如果您在fork之后調用管道,則該過程的每個副本都會獲得自己的管道。 將pipe()放在fork()之前,它應該可以工作。

暫無
暫無

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

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