C 在此代码中调用fork()的次数?

C 在此代码中调用fork()的次数?,c,fork,C,Fork,这是我的代码,我从我的研究所上一年的问题论文中得到的 #include<stdio.h> #include<unistd.h> int main() { fork(); fork() && fork() || fork(); fork(); printf("forked "); return 0; } #包括 #包括 int main() { fo

这是我的代码,我从我的研究所上一年的问题论文中得到的

   #include<stdio.h>
   #include<unistd.h>
    int main() 
    {
       fork();
       fork() && fork() || fork();
       fork();
       printf("forked ");
       return 0;
    }
#包括
#包括
int main()
{
fork();
fork()&&fork()| fork();
fork();
printf(“分叉”);
返回0;
}

我得到了20次打印“分叉”作为输出。有人能解释一下为什么会发生这种情况吗?

是的,在正常情况下(系统资源不低),您会得到20个
分叉
打印输出。为什么?

第一个fork是无条件的,因此无论接下来发生什么,我们都会得到两次。与第三组相同,因此我们将得到第二组叉子的四倍,如果我们为了清晰起见添加括号,是这样的:

(fork() && fork()) || fork();
从这里来多少?fork将向一个进程返回零(false),而向另一个进程返回非零。因此:

        -> true
 true -/-> false -\-> true
                   -> false

 false ------------\-> true
                    -> false

在每一行中都有一个单独的进程进行调用。你可以看到有五条线,所以有五个过程。将其乘以我们上面确定的四,得到20。

我删除了你问题的一部分,因为它是重复的,你可以自己研究和&&|和| |的工作方式。有些问题清楚地表明,海报没有费心自己研究。这样的问题不受欢迎。请阅读关于如何提出好问题的指南:特别是查找短路操作员