我正在尝试创建一个shell,但在实现管道时遇到了麻烦。目标是在创建的shell上键入命令(例如ls -l -a | sort -u < myfile > myfile2 | w
)。管道数是随机的,代码必须支持n个管道。
我有这样的事情:
int fork_pipe(int n)
{
int i;
int in=0;
int fd[2];
for(i=0; i< n; i++)
{
pipe(fd);
if(fork()==0)
{
if(in != 0)
{
dup2(in,0);
close(in);
}
if(out != 1)
{
dup2(out,1)
close(out);
}
execpv(argv_current_command,argv_current_command++); //Incompleto
close(fd[1]);
in = fd[0];
}
}
if(in!=0)
{
dup2(in,0);
}
execpv(argv_current_command,argv_current_command++);
}
我有一个pipe_count来知道稍后将作为n发送到fork_pipe函数的管道数。