Warum führt fork () zu einer doppelten Ausgabe? [Duplikat]

8
%Vor%

Das fork befindet sich nach dem Streaming in cout , aber dieser Code gibt 11 aus. Warum? Und warum druckt der Code nur 1, wenn std::endl zu cout hinzugefügt wird?

%Vor%     
COUNTERKILL 08.04.2016, 14:20
quelle

1 Antwort

12

Es wird durch Stream-Pufferung verursacht. Wenn std::endl in den Stream eingefügt wird, wird es gelöscht. Wenn Sie also forkieren, ist der Stream-Puffer leer. Wenn Sie std::endl nicht einfügen, wird der Stream erst beim Beenden des Programms gelöscht. fork() bewirkt, dass der Ausgabestrom dupliziert wird, einschließlich nicht gefüllter Inhalte. Nach dem fork() gibt es 2 Prozesse mit nicht-leeren Ausgabepuffern, die die '1' enthalten. Sie verlassen beide, spülen ihre Puffer und Sie sehen "11".

    
Rob K 08.04.2016, 14:27
quelle

Tags und Links