在C中创建管道

时间:2011-10-20 07:04:05

标签: c shell unix pipe

  

可能重复:
  Pipe in C UNIX shell

我试图在2个子进程之间创建一个管道: Child1关闭输入并输出到管道 Child2关闭输出并接受输入:

        pipe(&fd[0]);                               //Create a pipe
        proc1 = fork();

        //Child process 1
        if (proc1 ==  0)
        {
            close(fd[0]);                           //process1 doenst need to read from pipe
            dup2(fd[1], STD_OUTPUT);
            close(fd[1]);
            execvp(parameter[0], parameter);        //Execute the process
        }

        //Create a second child process
        else
        {
            //Child process 2
            proc2 = fork();
            if (proc2 == 0)
            {
                close(fd[1]);
                dup2(fd[0], STD_INPUT);
                close(fd[0]);
                execvp(parameter2[0], parameter2);
            }
            //Parent process
            else
            {
            waitpid(-1, &status, 0);            //Wait for the child to be done
            }
        }

但是,我在某个地方出错了,我不确切知道在哪里(没有任何错误,更多的是逻辑错误)

1 个答案:

答案 0 :(得分:2)

管道向后。 fd[1]用于撰写,fd[0]用于阅读。

旁注: pipe(&fd[0]);看起来有点奇怪...... pipe(fd);相当,但(对我来说)更清晰。