-2

重複の可能性:
Linux gcc での fork() の
動作 このコードが 2 回出力されるのはなぜですか?

#include<stdio.h>
main()
{

 printf("hello\n");
 fork();

}

上記のコードは「hello」を 1 回出力します。以下のコードは「hello」を 2 回出力します。

#include<stdio.h>
main()
{

 printf("hello");
 fork();

}

上記のコードは、「hello」を 2 回出力します。

誰かこの奇妙な振る舞いを説明してください。

4

1 に答える 1

3

このように動作することは保証されていませんが、通常の動作は次のとおりです。

printf("hello");

これ"hello"は出力バッファーに出力されますが、そのバッファーはまだフラッシュされていません。その後、

fork();

プログラムの状態は、空でない出力バッファを含めて子プロセスにコピーされます。終了時に、親と子の出力バッファーは両方ともフラッシュされます。

改行を使用すると、出力バッファはfork().

于 2012-10-19T13:36:42.247 に答える