2016-04-19 13 views
8

Wenn nach einem fork() aufgerufen wird, sollte das Programm von der ersten Anweisung nach der Gabel fortgesetzt werden, warum wird dann das Wort START zweimal gedruckt?Warum wird das printf() vor dem fork() auch nach dem fork() ausgeführt?

#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; 
} 

Zum Beispiel eine mögliche Ausgabe lautet:

START ... 605: Ich habe 606

START ... 606: Ich habe 0

Antwort

8

Da Sie den Ausgabepuffer nicht gelöscht haben, ist der Text sowohl im Ausgangspuffer des Eltern- als auch des Kind-Ausgabepuffers nach fork() vorhanden.

Fügen Sie fflush(stdout); nach dem ersten printf() hinzu und sehen Sie den Unterschied.

+0

Sie können auch eine neue Zeile ('\ n') am Ende der Zeichenfolge hinzufügen, und der Puffer sollte geleert werden. – ciamej

+0

@ciamej Ja, aber das wird (etwas) andere Ausgabe geben. – trojanfoe

+0

@SergeyA Ich wusste nicht, dass es ein Betrogener war. Warum haben Sie nicht auch die Frage von dasblinkenlight gestellt? – trojanfoe