如何为以下代码创建二叉树?
#include <stdio.h>
#include <unistd.h>
int main()
{
fork();
fork() && fork() || fork();
fork();
printf("forked\n");
return 0;
}
基本上我无法解决逻辑运算符条件。对于无条件的fork()语句,可以很容易地完成,但是上面的代码呢。 这里是参考链接 http://www.geeksforgeeks.org/fork-and-binary-tree/
答案 0 :(得分:1)
#include <stdio.h>
int main()
{
fork(); /* A */
( fork() /* B */ &&
fork() /* C */ ) || /* B and C are grouped according to precedence */
fork(); /* D */
fork(); /* E */
printf("forked\n");
return 0;
}
因此,根据显示的图表,每个节点总是有2个子节点。
“成功时,子进程的PID在父进程中返回,并在子进程中返回0。”
让我们看看叉B. 父进程(m)将返回非neidtive pid,子进程(c1)返回0.
因此,父进程执行 fork C ,但跳过 fork D 归因于short circuit evaluation。
(1234 && 4392) || fork()
新创建的子进程会跳过 fork C 并执行 fork D 出于上述原因。
(0 && fork() ) || fork()