请解释以下代码的输出:
#include<stdio.h>
#include<stdlib.h>
int main(){
if(fork()&&fork()){
fork();
printf("hello");
}
}
输出:hellohello
答案 0 :(得分: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个hellos。