#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main() {
std::cout << 1;
fork();
exit(0);
}
The fork
is located after streaming into cout
, but this code prints 11.
Why? And why does the code only print 1 if std::endl
is added to cout
?
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main() {
std::cout << 1 << std::endl;
fork();
exit(0);
}
It's caused by stream buffering. Inserting std::endl
into the stream causes it to be flushed, so when you fork, the stream buffer is empty. When you don't insert std::endl
, the stream doesn't get flushed until program exit. fork()
causes the output stream to be duplicated, including unflushed contents. After the fork()
there are 2 processes with unflushed output buffers containing the '1'. They each exit, flushing their buffers and you see "11".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With