我有一个我不明白的 fork 问题。
#include <stdio.h>
#include <string.h>
main(){
printf("test 1.\n");
fork();
printf("test 2.\n");
}
输出是:
test 1.
test 2.
test 1.
测试2.
我不应该得到...:
test1
test2
test2
我真的不明白这一点,因为 fork 应该在 fork(); 之后创建子进程;并且不再打印 teste1 。
你打电话时printf
,它不会立即打印任何文本。相反,它会等到你打印了很多文本,或者你调用fflush(stdout)
,或者程序退出。 (编辑:还有其他事情会导致打印缓冲文本)
当进程分叉时,它会复制未打印文本的缓冲区(其中包含“test 1.\n”)。两个进程退出时都会打印“test 1.\n”。
Calling fflush(stdout)
before fork()
通过确保在进程分叉之前实际打印“test 1.\n”来修复此问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)