我明白叉&& 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是的,我在想同樣的事情...... –