为什么fork()导致重复输出?

时间:2016-04-08 14:20:44

标签: c++ linux fork

#include <iostream>
#include <unistd.h>
#include <stdlib.h>

int main() {
    std::cout << 1;
    fork();
    exit(0);
}

fork位于流入cout之后,但此代码打印11。 为什么?如果将std::endl添加到cout

,代码为什么只打印1?
#include <iostream>
#include <unistd.h>
#include <stdlib.h>

int main() {
    std::cout << 1 << std::endl;
    fork();
    exit(0);
}

1 个答案:

答案 0 :(得分:12)

由流缓冲引起。将std::endl插入到流中会导致它被刷新,因此在fork时,流缓冲区为空。如果您没有插入std::endl,则在程序退出之前,流不会被刷新。 fork()导致输出流重复,包括未刷新的内容。在fork()之后,有2个进程具有未刷新的输出缓冲区,其中包含&#39; 1&#39;。他们每个人都退出,冲洗他们的缓冲区,你会看到&#34; 11&#34;。