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?
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".