-1

请解释以下代码的输出:

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

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

输出:你好你好

4

1 回答 1

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.
    }   
}

应该注意的是,一旦 main 执行了第一fork()个子进程,它就会继续运行fork()它自己的子进程。但是由于&&孩子得到的运算符的(0 && somepid)计算结果为假,这就是为什么你没有得到 3 hellos。

于 2013-08-06T16:17:52.590 回答