2013-05-19 58 views
3

我有以下代碼:計數過程在for循環

for(i=1; i<=2; i++) 
{ 
    fork(); 
    printf("x "); 
} 

我算出x應被打印出來的6倍:在第二次在第一次迭代兩次和4倍。

而是,X打印8次。爲什麼?

+2

[fork()和output](http://stackoverflow.com/questions/9364410/fork-and-output) – hmjd

回答

7

由於緩衝。通常,stdout是行緩衝,所以

printf("x "); 

不立即寫"x "到終端,但到輸出緩衝器。當進程fork() s被複制時,所以第二次迭代之後的四個進程中的每一個在輸出緩衝區中有兩個"x " [其中一個來自父級/第一次迭代之前,一次來自第二次迭代],當它退出時,八完全打印x

printf("x ");之後立即沖洗緩衝區,只打印6個。

+0

'fflush(stdout);'是在這裏遵循Daniel的建議的最簡單的方法。 –