2013-06-27 150 views
0

好吧,所以我一直在寻找这遍遍的stackoverflow,并绝对谷歌搜索了好半个小时,但我似乎得到的答案几乎没有任何关系我的东西想要做的,希望有人能帮助我在这一个,继承人的代码:分叉二叉树,叉功能问题

int cCount = 0; 

while(cCount < 2) 
{ 
    switch(fork()) 
    { 
    case 0: 
    cCount++; 
    break; 

    case -1: 
    printf("Failed"); 
    break; 

    default: 
    break; 
    } 
} 

return; 

现在对于出现的,这个代码是想创建一个具有3级树的问题(0,1,2) ,

0是它开始分岔的主要亲本

1为2点的孩子的父母的在0

2为4名的儿童的父母2在1

创建对称树。从本质上讲,虽然我有几个问题:

  1. 交换机上的每个循环执行叉子,所以从理论上讲,如果叉> 0,则仍然会分叉创建一个子儿的父母和循环将继续下去,因此,它可能最终会产生一个父母 - 父母 - 父母 - 父母,而不是每个父母的2个孩子,然后是4等于2等。叉子如何知道该怎么做?

  2. 说我想做一棵树,在最后一层有一个更多的孩子(级别),例如,我将如何开始?

我理解叉是否正确?请解释一下,如果不是这样,那么很多教程都是围绕网络进行的,但它们似乎都使它变得更加复杂。

干杯,谢谢 对我好,英语不是我的母语。

回答

0

此代码基本上都会fork炸弹,和这里的原因:

当进程遇到第一个fork,它会为孩子返回0,父正数(孩子的PID) 。因此,父母的cCount实例永远不会增加,所以循环将永远运行。

+0

很高兴知道我设计了一个DoS,总是很方便。在这种情况下,如何在叉子内部调用叉子。因为如果你只是调用fork(),它将仅派生父代。 –

+0

你需要做的是交换一些东西,所以'cCount ++;'行在'default:'块中,而不是'case 0:'块。另外,你应该把'cCount = 0;'这行加到'case 0:'块中。 为了防止它永远循环,你需要一个'level'变量,它从零开始,并在刚刚提到的'cCount = 0;'行后面递增。然后,您可以使用该变量来确定是否应该继续分叉。 –