Shell's Home

Feb 1, 2013 - 1 minute read - Comments

fork两问

问题1

以下代码。

int main() {
    fork();
    fork();
    fork();
    printf("---n");
    return 0; 
}

编译后执行./a.out | wc -l,输出多少?

问题2

以下代码。

int main() {
    fork();
    printf("b");
    if (fork() == 0) {
        write(1, "a", 1);
    }else{
        write(1, "c", 1);
    }
    return 0; 
}

编译后执行./a.out,输出多少?

答案

第一个是8,因为pipe会继承。

第二个是cabcbbab,结果不恒定,原因比较复杂。至少应当能看懂2个a2个c4个b,c先出ab后出最后一个是b。