Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fork()和二叉树的创建_C_Fork_Binary Tree - Fatal编程技术网

C fork()和二叉树的创建

C fork()和二叉树的创建,c,fork,binary-tree,C,Fork,Binary Tree,如何为下面的代码创建二叉树 #include <stdio.h> #include <unistd.h> int main() { fork(); fork() && fork() || fork(); fork(); printf("forked\n"); return 0; } #包括 #包括 int main() { fork(); fork()&&fork()| fork(); fork(); printf(“分叉

如何为下面的代码创建二叉树

#include <stdio.h>
#include <unistd.h>
int main()
{
   fork();
   fork() && fork() || fork();
   fork();

   printf("forked\n");
   return 0;
}
#包括
#包括
int main()
{
fork();
fork()&&fork()| fork();
fork();
printf(“分叉的”);
返回0;
}
基本上,我无法解决逻辑运算符条件。对于无条件fork()语句,这可以很容易地完成,但是上面的代码呢。 以下是链接供参考
#包括
int main()
{
fork();/*A*/
(fork()/*B*/&&
fork()/*C*/)| |/*B和C根据优先级分组*/
fork();/*D*/
fork();/*E*/
printf(“分叉的”);
返回0;
}
  • 有5个fork调用(A、B、C、D、E)
  • 程序从一个主线程(m)开始
  • 执行fork时,将创建一个新的子进程。(c)
因此,根据所示的图表,每个节点将始终有2个child节点

  • 左侧节点始终是创建过程(m)
  • 右节点是子进程
成功时,子进程的PID在父进程中返回,0在子进程中返回

让我们看看叉子B。 父进程(m)将返回非负pid,子进程(c1)返回0

  • 因此,父进程执行fork C,但跳过fork D由于以下原因:

    (1234&4392)| | fork()

  • 新创建的子进程跳过fork C并执行fork D由于上述原因

    (0&&fork())| | fork()

#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;
}