问题
#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);
}
回答1:
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".
来源:https://stackoverflow.com/questions/36502046/why-does-fork-result-in-duplicated-output