3

次のコードがあります。

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

x を 6 回出力する必要があると計算しました。最初の反復で 2 回、2 回目の反復で 4 回です。

代わりに、X が 8 回出力されます。なんで?

4

1 に答える 1

7

バッファリングのため。通常stdoutはラインバッファなので

printf("x ");

をすぐ"x "に端末に書き込むのではなく、出力バッファに書き込みます。それはプロセスが s のときにコピーされるfork()ため、2 回目の繰り返しの後の 4 つのプロセスのそれぞれは"x "、出力バッファーに 2 つ [親から 1 つ/最初の繰り返しで fork する前に 1 つ、2 番目の繰り返しから 1 つ] を持ち、プロセスが終了して 8 つxの s が実行されます。まとめて印刷。

の直後にバッファーをフラッシュするprintf("x ");と、6 つだけが出力されます。

于 2013-05-19T14:24:09.257 に答える