我正在嘗試在C中實現一個多層管道的外殼。C編碼多個管道
我只有一個管道功能, b但不是| b | C。
int c[2];
int returnv;
pid_t id;
pipe(c);
pid = fork()) == 0
if (pid)
{
dup2(c[1], 0);
close(p[1]);
close(p[1]);
execvp(array(0), array);
}
if ((pid = fork()) == 0)
{
dup2(p[0], 1);
close(p(0));
close(p[0]);
returnv = execvp(array[0], array);
}
close(p[1]);
wait(NULL);
wait(NULL);
wait(NULL);
return returnv;
這是第二個版本:
int i = 0;
while (i < x)
{
pipe(c);
if ((pid = fork()) == 0)
{
dup2(t[i], 1);
if (i < 2)
dup2(p[0], 1);
close(p[1]);
r= execvp(cmd[i][0], cmd[i]);
}
wait(NULL);
close(p[0]);
i += 1;
t[i] = p[1];
我如何添加這個小東西,這將使該代碼管理多個管好嗎? 非常感謝!
其實你只需要調用fork()兩次,而你只需要一次。這是因爲fork()返回兩次:子進程爲0,父進程爲> 1(通常是子進程的pid)。 我不認爲你需要所有的代碼來做你需要的。 – none
我已經花了這麼多時間在這一個,這是唯一的作品^^我想只有一個調用execvp所需的多管道,但我不能讓它的工作。 :( – user2145240
不要從帖子中刪除代碼,它使答案無效 – FDinoff