分叉二叉树,fork功能问题

时间:2013-06-27 20:57:36

标签: c linux tree fork std

好吧,所以我一直在看堆栈溢出,绝对谷歌搜索半小时,但我似乎得到的答案几乎与我实际想做的事情无关,希望有人会帮助我在这一个,继承人的代码:

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是0的父母的2个孩子

2是1个2个父母中的4个孩子

创建对称树。基本上虽然我有几个问题:

  1. Switch在每个循环上执行fork,所以理论上如果fork&gt; 0,它仍然会分叉为父级创建子子级,循环将继续运行,因此最终可能会有一个父级父级父级父级,而不是每个父级2个子级,然后是2个子级等。 fork如何知道该怎么做?

  2. 假设我想在最后一层(级别)做一个附加了一个孩子的树,例如,我该如何开始?

  3. 我能正确理解叉子吗?请解释一下,如果不是,网上有很多教程,但它们似乎都比它更复杂。

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

1 个答案:

答案 0 :(得分:0)

这段代码基本上会分叉炸弹,这就是原因:

当进程命中第一个fork时,它将为子进程返回0,为父进程返回正数(子进程的PID)。因此,父cCount的实例永远不会递增,因此循环将永远运行。