gpt4 book ai didi

c - 在 C 中实现管道

转载 作者:行者123 更新时间:2023-11-30 17:10:50 24 4
gpt4 key购买 nike

我正在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com