2012-12-09 43 views
2

我有下面的代码,并要求我多少次 “A”, “B”, “C”, “d”, “E” 将被打印叉子及其功能?

fun() { 
    printf("A"); 
    fork(); 
    printf("B"); 
    if (fork() != 0) { 
    printf("C"); 
    fork(); 
    printf("D"); 
    } 
    printf("E"); 
} 

所以它应该是:

A 
A 
B 
E 

即时通讯不知道如果我上面的答案是正确的?以及if(fork() !=0)行是做什么的?

回答

4

1个线程打印a,2个线程打印b。 2个叉子中的每一个,但只有2个父母进入if语句并打印c。 d这两个叉和全部4个procs中的每一个都打印d。然后,每个6种特效(两个孩子从如果叉和4个线程出来,如果打印E的

你不能确定订单,但每个字母的数量为:

一个X1

b X2

çX2

d X4

ë5233

6

documentation

成功时,子进程的PID返回父,并在孩子则返回0。失败时,在父项中返回-1,不创建子进程,并且适当地设置errno。

2

if (fork() != 0) { ... }正在检查以确保当前进程不是原始分叉进程的子进程。只有父进程才会执行此块中的代码。

这是可行的,因为fork()在父进程中返回一个PID,在子进程中返回一个0,错误时返回-1。