有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
只打印一次,第一次打印两次?
您正在遇到系统printf
实施的缓冲行为.在第一种情况下,字符串被打印到缓冲区,但由于没有换行符(并且你没有调用fflush
),它只是坐在缓冲区中.然后你fork,当它们各自的进程退出时,两个forked缓冲区都被刷新.
在第二种情况下,\n
导致缓冲区在fork 之前被刷新,因此当forked进程退出时没有剩余的输出.
归档时间: |
|
查看次数: |
2005 次 |
最近记录: |