2016-04-19 6 views
8

fork()が呼び出された後、フォークの後の最初の命令からプログラムを続ける必要がある場合、STARTという単語が2回印刷されるのはなぜですか?なぜfork()の前のprintf()がfork()の後でも実行されるのはなぜですか?

#include<stdio.h> 
#include<unistd.h> 

int main(){ 
     int pid; 
     printf("START..."); 
     pid = fork(); 
     printf("%d: I've got %d\n", getpid(), pid); 
     return 0; 
} 

例えば可能な出力は次のようになります。

START ... 605:私は606 ... 606

STARTを持っている:私は0

を持っています

答えて

8

出力バッファをフラッシュしなかったので、テキストはfork()の後に親と子の出力バッファの両方に存在します。

最初にprintf()の後にfflush(stdout);を追加し、その違いを確認してください。

+0

文字列の最後に改行( '\ n')を追加して、バッファをフラッシュする必要があります。 – ciamej

+0

@ciamejはい、しかし、それは(わずかに)異なる出力を与えるでしょう。 – trojanfoe

+0

@ SergeyA私はそれが嘘であることは知らなかった。また、なぜあなたはdasblinkenlightの同じ質問をしていないのですか? – trojanfoe

関連する問題