2013-08-06 181 views
-1

請解釋下面的代碼輸出:系統調用fork輸出:

#include<stdio.h> 
#include<stdlib.h> 

int main(){ 
    if(fork()&&fork()){ 
     fork(); 
     printf("hello"); 
    } 
} 

輸出:hellohello

+1

Aww,不,不是! – 2013-08-06 16:24:02

回答

1

你必須明白fork()的返回兩次,一次家長,一旦孩子。孩子得到返回0和父母得到返回pid的子進程。知道了這一點,我們可以推理代碼:

自C,0是假的,還有什麼是真的會發生以下情況:

#include<stdio.h> 
#include<stdlib.h> 

int main(){ 
     //Create 2 new children, if both are non 0, we are the main thread 
     //Jump into the if statement, the other 2 children don't jump in and go out of mains scope 
    if(fork() && fork()){ 
     //Main thread forks another child, it starts executing right after the fork() 
     fork(); 
     //Both main and the new child print "hello" 
     printf("hello"); 
     //both main and child return out of if and go out of scope of main. 
    } 
} 

應該指出,一旦主要執行第一fork()那個孩子繼續fork()自己的孩子。但由於&&運營商,該子女得到(0 && somepid)評估爲false,這就是爲什麼你沒有得到3 hello。