fork verwirrt mich [duplizieren]

8

Kann jemand bitte erklären, wie dieser Code funktioniert?

%Vor%

Drucke:

%Vor%

Meine genaue Frage ist, warum hello zweimal gedruckt wird. Wird nicht hello zuerst gedruckt, dann wird fork() ausgeführt?

Manchmal druckt es auch:

%Vor%

Warum diese Ausgabe?

    
guitar_geek 05.08.2014, 14:59
quelle

3 Antworten

18

Der Grund ist: gepufferte Ausgabe. "Hallo" ist im Puffer, aber noch nicht gelöscht, wenn Sie die Gabelung machen, also beginnt der gegabelte Prozess mit demselben Puffer, der das gleiche Wort "Hallo" enthält. Dann geben sowohl das Eltern- als auch das Kindwort "Welt" aus, so dass die Gesamtausgabe für beide "HelloWorld" ist.

    
Erich Kitzmueller 05.08.2014, 15:04
quelle
4

Hinzufügen zu @ammoQ Antwort:

%Vor%

bringt Sie zum erwarteten Ergebnis.

    
Jeffery Thomas 05.08.2014 15:09
quelle
3

Fork erstellt eine Kopie des Prozesses. Und printf () kann gepuffert werden, wenn die Verzweigung auftritt, dieser Puffer würde kopiert werden.

Ziemlich solide Erklärung hier: fork () verzweigt sich mehr als erwartet?

    
DaveyLaser 05.08.2014 15:05
quelle

Tags und Links