我明白叉&& shorticircuiting,需要帮助理解为什么fork()和用C
if(fork() && !fork())
不计算在第一胎过程中的第二叉程序。
父返回[X | X> 0] ^![Y | Y> 0]
child.0返回0并且不调用第二叉过程
child.1返回[X | X> 0]^!0
为什么child.0没有调用第二个fork程序?
由于
我明白叉&& shorticircuiting,需要帮助理解为什么fork()和用C
if(fork() && !fork())
不计算在第一胎过程中的第二叉程序。
父返回[X | X> 0] ^![Y | Y> 0]
child.0返回0并且不调用第二叉过程
child.1返回[X | X> 0]^!0
为什么child.0没有调用第二个fork程序?
由于
如果&&
左操作数的计算结果为0(假),那么整个表达式会为0(假),而不管右操作数的值,所以右操作数的不评估在所有。
您正在使用&&
运算符,并且如果评估返回0时立即终止。基本上,如果从左到右执行,并且在遇到0(或false)时立即终止运算符&&
。
第二fork()
不叫当第一fork()
返回0,因为布尔表达式(0 && fork())
将始终为0,无论什么fork()
回报。因此,为了提高性能,第二个fork()
被短路并且不被执行。
当你说孩子返回一些东西时,返回的fork()的值不是孩子返回的值,你似乎认为。检查你是否必须使用wait()。
您已经回答了您自己的问题;因为'&&'的短路行为。 –
@OliCharlesworth是的,我在想同样的事情...... –