2012-12-09 44 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。