fork如何与逻辑运算符一起工作

the*_*rus 0 c fork

main()
{
    if (fork() || (fork() && fork()))
    printf("AA\n");
    else if (!fork())
    printf("BB\n");
    else
    printf("CC\n");
}
Run Code Online (Sandbox Code Playgroud)

我运行了以下代码并获得AA AA CC BB CC BB的结果.虽然我理解fork如何工作,但我不明白它对逻辑运算符的作用.我们班上的老师希望我们为这个家庭作业提供答案.虽然我可以轻松运行此程序,但我想知道究竟发生了什么.任何人都可以向网站解释或指导我使用带逻辑运算符的fork时会发生什么.

我对c/c ++很新,所以对我很轻松.谢谢

SLa*_*aks 5

fork()返回0(false)到子进程,并且对父进程非零(true).

您可以将逻辑运算符应用于这些布尔值.

请记住,逻辑运算符会短路,因此0 || fork()根本不会调用fork.

如果仔细阅读代码并考虑每个fork()调用将返回的内容,您应该能够弄明白.

  • 确实.可能最简单的方法是绘制一个树,在每个fork上分支,因为它在表达式中被计算,带有子分支(0)和父分支(非0). (2认同)
  • 您可能希望更改printf语句以包含进程ID,以便更清楚地显示输出的来源. (2认同)