2013-02-04 35 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()。