2013-02-04 34 views
-1

我明白叉&& shorticircuiting,需要帮助理解为什么fork()和用C

if(fork() && !fork()) 

不计算在第一胎过程中的第二叉程序。

父返回[X | X> 0] ^![Y | Y> 0]
child.0返回0并且不调用第二叉过程
child.1返回[X | X> 0]^!0

为什么child.0没有调用第二个fork程序?

由于

+1

您已经回答了您自己的问题;因为'&&'的短路行为。 –

+0

@OliCharlesworth是的,我在想同样的事情...... –

回答

2

如果&&左操作数的计算结果为0(假),那么整个表达式会为0(假),而不管右操作数的值,所以右操作数的不评估在所有。

0

您正在使用&&运算符,并且如果评估返回0时立即终止。基本上,如果从左到右执行,并且在遇到0(或false)时立即终止运算符&&

0

第二fork()不叫当第一fork()返回0,因为布尔表达式(0 && fork())将始终为0,无论什么fork()回报。因此,为了提高性能,第二个fork()被短路并且不被执行。

0

当你说孩子返回一些东西时,返回的fork()的值不是孩子返回的值,你似乎认为。检查你是否必须使用wait()。