我正在尝试在C中实现一个多层管道的外壳。C编码多个管道
我只有一个管道功能, b但不是| b | C。
int c[2];
int returnv;
pid_t id;
pipe(c);
pid = fork()) == 0
if (pid)
{
dup2(c[1], 0);
close(p[1]);
close(p[1]);
execvp(array(0), array);
}
if ((pid = fork()) == 0)
{
dup2(p[0], 1);
close(p(0));
close(p[0]);
returnv = execvp(array[0], array);
}
close(p[1]);
wait(NULL);
wait(NULL);
wait(NULL);
return returnv;
这是第二个版本:
int i = 0;
while (i < x)
{
pipe(c);
if ((pid = fork()) == 0)
{
dup2(t[i], 1);
if (i < 2)
dup2(p[0], 1);
close(p[1]);
r= execvp(cmd[i][0], cmd[i]);
}
wait(NULL);
close(p[0]);
i += 1;
t[i] = p[1];
我如何添加这个小东西,这将使该代码管理多个管好吗? 非常感谢!
其实你只需要调用fork()两次,而你只需要一次。这是因为fork()返回两次:子进程为0,父进程为> 1(通常是子进程的pid)。 我不认为你需要所有的代码来做你需要的。 – none
我已经花了这么多时间在这一个,这是唯一的作品^^我想只有一个调用execvp所需的多管道,但我不能让它的工作。 :( – user2145240
不要从帖子中删除代码,它使答案无效 – FDinoff