main()
{
fork() && fork() || fork();
printf("forked\n");
return 0;
}
//如何打印叉子5次而不是8次?
答案 0 :(得分:4)
由于短路。
如果我改写这个:
main()
{
// fork() && fork() || fork();
if (fork()) {
if (!fork()) {
fork();
}
} else {
fork();
}
printf("forked\n");
return 0;
}
在第一个fork
之后,您将有一个进程立即进入else分支,并且将继续进行。进入else循环的那个将只分叉一次(右分支)。进入内部的那个将分叉一次,它的孩子将再次分叉。
f
/ \
f f
|
f
答案 1 :(得分:1)
因为和操作员。请记住,操作员一旦遇到错误就会终止。 fork将为父级或子级返回0(false)(忘记),它将终止跳过其他2个for的布尔表达式,这就是为什么你只打印fork 5次而不是8次