2016-08-06 21 views
0

はここに私のCプログラムです声明:理解STDOUT出力が

int main() { 
    fork(); 
    printf("one\n"); 
    fork(); 
    printf("two\n"); 
} 

出力は次のようになります。

one 
one 
two 
two 
two 
two 

時には(順序を変更することができる):

one 
two 
one 
two 
two 
two 

なぜ出力8最初のプログラム内の単語と第二における6ですか?

+0

stdoutはバッファされた行です。しかし、プロセスの実行順序は任意であるため、問題はありません。したがって、順序は問わない可能性があります。 –

+0

これは宿題によく似ています。あなたはどんな説明を考えましたか? – Peter

+0

これは宿題の問題ではありません:)ここで起こった場合、バッファの上書きを理解したいと思います。 –

答えて

1

2つのプロセスが最初のprintf()を実行し、次に4つのプロセスが2番目のprintf()を実行するため、6つの出力が必要です。

最初のコードでは、バッファ内の内容がフラッシュされる前にfork()が実行されたようですが、バッファの内容が複製されて超過出力が表示されます。

2番目のコードでは、バッファがフラッシュされているため、余分な出力が出ていないと思われます(\n)。