2016-08-06 31 views
0

Hier ist meine C-Programm:Verständnis stdout ausgegeben, wenn mit Gabel() verwendet

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

Die Ausgabe lautet:

one two one two one two one two 

jedoch Wenn ich den Code ändern und einen \n zum Druck hinzufügen Erklärung:

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

Die Ausgabe lautet:

one 
one 
two 
two 
two 
two 

Oder manchmal (die Reihenfolge kann sich ändern):

one 
two 
one 
two 
two 
two 

Warum ist die Ausgangs 8 Worte in dem ersten Programm und 6 in der zweiten?

+0

Stdout ist Linie gepuffert. Aber das macht nichts, da die Ausführungsreihenfolge der Prozesse sowieso willkürlich ist, also könnte es in beliebiger Reihenfolge passieren. –

+0

Das sieht sehr nach einem Hausaufgabenproblem aus. Welche Erklärung hast du in Betracht gezogen? – Peter

+0

Dies ist kein Hausaufgaben-Problem :) Ich möchte Puffer überschreiben, wenn es hier passiert. –

Antwort

1

2 Prozesse führen die erste printf(), und dann 4 Prozesse führen die zweite printf(), so dass es 6 ausgegeben werden sollte.

Im ersten Code, es scheint fork() wird ausgeführt, bevor was im Puffer ist geleert wird, dann der Inhalt des Puffers ist doppelt und dann überschüssige Ausgabe erschien.

Im zweiten Code, es scheint \n hatte es den Puffer spülen und daher keine überschüssige Ausgabe erschien.