我知道这个问题被问了很多,但我仍然对如何解决我的问题感到困惑。我试图编写处理命令行输入的代码,以解决多个管道的可能性。但是,我没有成功,我的代码虽然执行不正常。错误是,一旦我分叉了孩子,在第一个命令执行后,我无法进入管道进入的下一个命令。如何在不获取错误文件描述符的情况下移动到管道中的下一个命令?这是一段代码;
a = 0;
while (a < cmdnum)
{
pid[a] = fork();
if( pid[a] == 0)
{
if( a == 0)
{
close(1);
dup(p1_to_pn[a][1]);
for( k = 0; k < nump; k++)
{
close(p1_to_pn[k][0]);
close(p1_to_pn[k][1]);
}
args = tokenize(cmd[a]);
execv(args[0], args);
}
else if ( a == (cmdnum-1))
{
close(0);
dup(p1_to_pn[a][0]);
for( k = 0; k < nump; k++)
{
close(p1_to_pn[k][0]);
close(p1_to_pn[k][1]);
}
args = tokenize(cmd[a]);
i = execv(args[0], args);
}
else
{
close(0);
dup(p1_to_pn[a][0]);
close(1);
dup(p1_to_pn[a][1]);
for( k = 0; k < nump; k ++)
{
close(p1_to_pn[k][0]);
close(p1_to_pn[k][1]);
}
args = tokenize(cmd[a]);
execv(args[0], args);
}
}
a++;
}