用C实现管道

时间:2015-09-21 06:34:44

标签: c pipe execve

我在C中实现管道。当我尝试命令'cat aa |在我的程序中grep“something”'。挂在那里的grep进程似乎在等待输入。我不知道为什么。这是核心代码。只需将ExecuteCommand作为简单的调用execve函数,并正确传递所有参数。

if ((pid = fork()) < 0)
{
    perror("fork failed\n");
    exit(1);
}               
if (pid)
{   // parent as pipe WRITER
    close(pd[0]);
    close(1);
    // replace input with pipe
    dup(pd[1]);

    // recursively call next commands
    ExecuteCommand(cmds, env);
    FreeCommandsArray(&cmds);

    exit(0);
}
else
{   // child as pipe READER
    close(pd[1]);
    close(0); // close its READ end
    dup(pd[0]);
    ExecuteCommand(*(++splitCmds), env);
    FreeCommandsArray(&cmds);
    exit(0);
}

full code已打开。 另一个问题是我必须使用命令文件的完整路径作为execve的第一个参数(例如ls的/ bin / ls),否则,我收到错误消息,没有这样的文件。

1 个答案:

答案 0 :(得分:0)

这是grep第一个参数的引号导致问题。如果我在输入时摆脱它,它的效果很好。例如&#39; cat aa | grep drw&#39;而不是&#39; cat aa | grep&#34;某事&#34;&#39;