我正在尝试用C语言为我的shell实现一个多重管道。
我只有一个管道函数|B但不是a| 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];
我怎么能添加一些小东西,使这个代码管理多个管道吗?谢谢提前很多!
2条答案
按热度按时间2jcobegt1#
***编辑:***根据您的评论
要执行多个管道,你需要把所有的命令存储在某个地方。这就是为什么我使用了结构标签。
检查这个新版本也许更容易理解
所以首先你需要一个标签或者其他东西来存储你所有的命令:
然后是运行选项卡并启动所有内容的函数
rqqzpn5f2#
我会给予一个两管模型的工作版本和一个三管模型的提示。试一下,看看它是否有效。注意:如果不包含正确的头文件,
dup2()
将是一场噩梦。对于
a|b|c
,提示是使用两个管道,即p1[2]
和p2[2]
。尝试一下,让我们知道它是如何工作的。