この質問がよく聞かれることは知っていますが、問題を解決する方法についてはまだ本当に混乱しています. 複数のパイプを使用できるように、コマンド ライン入力を処理するコードを作成しようとしました。ただし、実行は正しく機能しませんが、コードは成功しません。バグは、子をフォークすると、最初のコマンドが実行された後にパイプが移動する次のコマンドに到達できないことです。間違ったファイル記述子を取得せずに、パイプ内の次のコマンドに移動するにはどうすればよいですか? これがコードの一部です。
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++;
}