我尝试在C中编写一个命令解释器。我必须创建dwo和三个重定向(例如ls | grep ^d | wc -l
和ls -ps | grep / | pr -3 | more
)
我有代码来操作一个重定向
if(k==1)
{
int pfds[2];
pipe(pfds);
child_pid = fork();
if(child_pid==0)
{
close(1);
dup(pfds[1]);
close(pfds[0]);
execlp(arg1[0], *arg1, NULL);
}
else
{
close(0);
dup(pfds[0]);
close(pfds[1]);
execlp(arg2[0], *arg2, NULL);
}
}
我的问题是如何使用pipe
和fork
进行两次和三次重定向?
我尝试只使用一个管道,但这不起作用。
答案 0 :(得分:1)
您必须创建与“转移”一样多的pipe
个变量。
然后创建一个命令列表。
如果您希望父进程离开,您将为每个命令分叉一个进程。否则少一点。
表示第一个命令,dup
或'dup2`仅适用于STDOUT。
和最后一个命令dup
或'dup2`仅适用于STDIN。
其余部分,dup
或'dup2`表示STDIN和STDOUT。
你可以用2到2的for循环来做到这一点。
例如: shell $&gt; cat file.txt | grep'pattern1 | pattern2'| grep'pattern1'| wc -l </ p>
我假设您没有使用exec
的父进程
因此,您将创建一个列表/数组/命令向量。 list将拥有所有4个命令。
为父进程本身的每个命令创建4个管道。
运行一个循环4次迭代,每个循环用于命令。
cat
)的STDOUT。wc -l
)。exec
。CHEERS:)