为什么这个程序用fork打印两次?

Bri*_*hon 5 c fork

根据我的理解fork(),这应该打印"Hello,World!" 曾经,因为之前只有一个过程fork被调用.但是,它会打印两次.奇怪的是,如果我添加一个\n字符串或使用puts()而不是printf(),它只打印一次.

#include<unistd.h>
#include<stdio.h>

int main() {
    printf("Hello, World!");
    fork();
}
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

缓冲。

由于系统上的标准输出默认情况下是缓冲的,因此它不会立即打印。然而,在进程退出之前,缓冲区将被刷新。

由于fork复制父级的整个内存空间、文件描述符状态等,因此它还将复制需要打印的缓冲数据。

因此,除非您在分叉之前显式刷新标准输出缓冲区(通过附加\n到输出或调用fflush(stdout);),否则两个进程都将有要打印的缓冲输出。