-1
請解釋下面的代碼輸出:系統調用fork輸出:
#include<stdio.h>
#include<stdlib.h>
int main(){
if(fork()&&fork()){
fork();
printf("hello");
}
}
輸出:hellohello
請解釋下面的代碼輸出:系統調用fork輸出:
#include<stdio.h>
#include<stdlib.h>
int main(){
if(fork()&&fork()){
fork();
printf("hello");
}
}
輸出:hellohello
你必須明白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。
Aww,不,不是! – 2013-08-06 16:24:02