3
我有以下代碼:計數過程在for循環
for(i=1; i<=2; i++)
{
fork();
printf("x ");
}
我算出x應被打印出來的6倍:在第二次在第一次迭代兩次和4倍。
而是,X打印8次。爲什麼?
我有以下代碼:計數過程在for循環
for(i=1; i<=2; i++)
{
fork();
printf("x ");
}
我算出x應被打印出來的6倍:在第二次在第一次迭代兩次和4倍。
而是,X打印8次。爲什麼?
由於緩衝。通常,stdout
是行緩衝,所以
printf("x ");
不立即寫"x "
到終端,但到輸出緩衝器。當進程fork()
s被複制時,所以第二次迭代之後的四個進程中的每一個在輸出緩衝區中有兩個"x "
[其中一個來自父級/第一次迭代之前,一次來自第二次迭代],當它退出時,八完全打印x
。
在printf("x ");
之後立即沖洗緩衝區,只打印6個。
'fflush(stdout);'是在這裏遵循Daniel的建議的最簡單的方法。 –
[fork()和output](http://stackoverflow.com/questions/9364410/fork-and-output) – hmjd