2012-03-06 24 views
6

可能性の重複:
Working of fork() in linux gccなぜこのコードは2回印刷されますか?

#include <stdio.h> 

void main() 
{ 
    printf ("ciao"); 
    fork(); 
} 

私はCの最適化に関するいくつかのアイデアを持っているが、私はよく分かりません。あなたは答えを知りたいですか?

+4

実行しようとしましたか? – MByD

+2

私はその質問を理解しているとは確信していません。何が印刷されるのかははっきりしています。また、mainはintを返さなければならず、fork()の機能はクリアされていません:) –

+0

はい "ciaociao"を出力します。私の質問は、なぜこれを印刷するのかということです。 – gc5

答えて

14

標準出力の内部バッファーが子プロセスで複製され、親プロセスと子プロセスの両方が終了すると両方のバッファーがフラッシュされるため、コードはおそらく"ciao"を標準出力と2倍に出力します。

最適化とは無関係です。フォーク()が呼び出されたとき

4

、親と子プロセスの両方がそれを継承し、それゆえ、それらの両方が

プリントアウト「チャオ」彼らはバッファをフラッシュします。 fflush(stdout)を呼び出すと

フォークを呼び出す前に一度だけ印刷されます

関連する問題