我正在尝试在 C 中实现多管道,以运行多个命令,如 shell。我已经创建了一个链接列表(在我的代码中称为 t_launch),如果您键入“ls | grep src | wc”,它看起来像这样:
wc -- 管道 -- grep src -- 管道 -- ls
每个 PIPE 节点都包含一个来自 pipe() 函数的 int tab[2](当然,每个 PIPE 节点都有一个 pipe() 调用)
现在我正在尝试执行这些命令:
int execute_launch_list(t_shell *shell, t_launch *launchs)
{
pid_t pid;
int status;
int firstpid;
firstpid = 0;
while (launchs != NULL)
{
if ((pid = fork()) == -1)
return (my_error("Unable to fork\n"));
if (pid == 0)
{
if (launchs->prev != NULL)
{
close(1);
dup2(launchs->prev->pipefd[1], 1);
close(launchs->prev->pipefd[0]);
}
if (launchs->next != NULL)
{
close(0);
dup2(launchs->next->pipefd[0], 0);
close(launchs->next->pipefd[1]);
}
execve(launchs->cmdpath, launchs->words, shell->environ);
}
else if (firstpid == 0)
firstpid = pid;
launchs = launchs->next == NULL ? launchs->next : launchs->next->next;
}
waitpid(firstpid, &status, 0);
return (SUCCESS);
}
但这不起作用:看起来命令不会停止阅读。例如,如果我输入“ls | grep src”,“src”将从 grep 命令中打印出来,但 grep 会继续读取并且永远不会停止。如果我输入“ls | grep 源代码 | wc”,没有打印出来。我的代码有什么问题?谢谢。