2010-10-06 40 views
0
main() 
{ 
    if (fork() || (fork() && fork())) 
    printf("AA\n"); 
    else if (!fork()) 
    printf("BB\n"); 
    else 
    printf("CC\n"); 
} 

我已運行以下代碼並獲得結果AA AA CC BB CC BB。 雖然我理解fork如何工作,但我不明白它對邏輯操作符有什麼作用。我們班的老師希望我們爲這個作業給出答案。雖然我可以輕鬆運行此程序,但我想知道究竟發生了什麼。 任何人都可以解釋或指導我到一個網站,當使用叉與邏輯運算符時會發生什麼。叉如何與邏輯運算符一起工作

我對c/C++很新穎,所以對我來說很容易。謝謝

+2

任何寫這樣的真實代碼(而不是作業分配)的人都必須立即拍攝。 – SLaks 2010-10-06 01:42:23

回答

5

fork()返回0(false)到子進程,並且非零(真)到父進程。

您可以將邏輯運算符應用於這些布爾值。

請記住,邏輯運算符會短路,所以0 || fork()根本不會調用fork

如果您通過代碼仔細閱讀並考慮每個fork()調用將返回的內容,您應該能夠弄清楚。

+2

確實。可能最簡單的方法是繪製一棵樹,當它在表達式中得到評估時,使用子分支(0)和父分支(非0)分支到每個分支。 – Amadan 2010-10-06 01:47:05

+0

也是這樣!fork()顛倒了孩子和父母的值。獲取值爲0的子項和子項目1 – thegreattaurus 2010-10-06 01:51:33

+2

您可能需要更改printf語句以包含進程標識,以便在輸出來自何處時更清晰。 – jabley 2010-10-06 01:51:55