【发布时间】:2020-03-26 18:16:29
【问题描述】:
我需要在 linux 中使用 fork() 创建一个进程树。 树一定是这样的:
此外,每个进程都有一个随机 ID。所以在每个过程中,我们都要比较他的ID和他的儿子ID,并保持最小的ID。
所以,我尝试使用递归函数来处理树的左侧部分,但它不起作用......(管道有很多问题......)
(对不起,我的英语不好,因为我是法国人:()
int creerArbreGauche(int n,int m)
{
if(m>0){
if(fork()==0){
printf("pid : %d m : %d \n",getpid(),m);
if(m==(n-1)) //si on est au dernier proc
{
printf("Premiere condition %d \n",id[0][m]);
close(tube_G_FP[0]);
write(tube_G_FP[1],&id[0][m],sizeof(int));
creerArbreGauche(n,m-1);
//read(tube_G_FP[0],&var,sizeof(int));
}
else{
printf("Je rentre ici\n");
close(tube_G_FP[1]);
read(tube_G_FP[0],&var,sizeof(int));
printf("Var = %d\n",var);
if(var<id[0][m]){
close(tube_G_FP[0]);
write(tube_G_FP[1],&var,sizeof(int));
printf("Var gagne et l'envoie au pere: %d \n",var);
creerArbreGauche(n,m-1);
//close(tube_G_FP[1]);
}
else{
close(tube_G_FP[0]);
write(tube_G_FP[1],&id[0][m],sizeof(int));
printf("id[0][%d] gagne et envoie au pere son id : %d \n",m,id[0][m]);
creerArbreGauche(n,m-1);
}
}
exit(0);
}
wait(NULL);
}
else{
return 0;
}
}
【问题讨论】:
-
“管道有很多问题” .. 什么样的问题?