我知道這個問題被問了很多,但我仍然非常困惑如何去解決我的問題。我試圖編寫處理命令行輸入的代碼來處理多個管道的可能性。但是,我不成功,我的代碼雖然執行無法正常工作。這個錯誤一旦我分叉了孩子,我就無法到達第一個命令執行後管道的下一個命令。如何移動到管道中的下一個命令而不抓取錯誤的文件描述符?這是一段代碼;在c中的linux的迭代管道實現c
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++;
}
只是爲了澄清,你在寫一個shell(或者像shell一樣的東西)嗎? –
一種外殼,是 – GFXGunblade