#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main() {
std::cout << 1;
fork();
exit(0);
}
fork
位于流入cout
之后,但此代码打印11。
为什么?如果将std::endl
添加到cout
?
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main() {
std::cout << 1 << std::endl;
fork();
exit(0);
}
答案 0 :(得分:12)
由流缓冲引起。将std::endl
插入到流中会导致它被刷新,因此在fork时,流缓冲区为空。如果您没有插入std::endl
,则在程序退出之前,流不会被刷新。 fork()
导致输出流重复,包括未刷新的内容。在fork()
之后,有2个进程具有未刷新的输出缓冲区,其中包含&#39; 1&#39;。他们每个人都退出,冲洗他们的缓冲区,你会看到&#34; 11&#34;。