我正在 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 的第一个参数(例如/bin/ls 代表 ls),否则,我会收到错误消息,不存在这样的文件。
最佳答案
这是 grep 第一个参数处的引号导致问题的原因。如果我在输入时去掉它,效果会很好。例如 'cat aa | grep drw' 而不是 'cat aa | grep“某事”'
关于c - 在 C 中实现管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32688741/