aka*_*ash 2 c fork system-calls
任何人都可以解释为什么输出
main()
{
printf("hello ");
fork();
printf("hello ");
}
Run Code Online (Sandbox Code Playgroud)
是:
你好你好你好你好
和输出:
main()
{
printf("hello\n");
fork();
printf("hello ");
}
Run Code Online (Sandbox Code Playgroud)
是:
你好
你好你好
什么区别会使wrt缓冲?
当您fork复制进程的内存时.这包括stdio缓冲区,因此如果hello停留在缓冲区中,它将由两个进程打印.这两个过程继续关于他们的业务,并最终刷新他们的缓冲区,你看到两次"你好".
现在在大多数实现中, stdout是行缓冲的,这意味着\n触发刷新.所以当fork发生这种情况时,缓冲区是空的.防止这种情况的可靠方法是在分叉之前冲洗所有东西.
那么为什么hello在第二个输出的第二行出现两次
现在有两个进程(父进程和子进程)执行相同的代码,因此printf执行两次.