使用printf在c中fork()

DDu*_*man 5 c printf fork

有2个不同的程序,它们很小,例如:

int main()
{
        printf ("print hello");
        fork();
}
Run Code Online (Sandbox Code Playgroud)
int main()
{
        printf ("print hello\n");
        fork();
}
Run Code Online (Sandbox Code Playgroud)

输出1是:`print helloprint hello

输出2是:print hello

问题是,为什么\n只打印一次,第一次打印两次?

Car*_*rum 8

您正在遇到系统printf实施的缓冲行为.在第一种情况下,字符串被打印到缓冲区,但由于没有换行符(并且你没有调用fflush),它只是坐在缓冲区中.然后你fork,当它们各自的进程退出时,两个forked缓冲区都被刷新.

在第二种情况下,\n导致缓冲区在fork 之前被刷新,因此当forked进程退出时没有剩余的输出.

  • 谢谢!现在明白了. (4认同)