我有一个问题用叉子,我不会丢脸.
#include <stdio.h>
#include <string.h>
main(){
printf("test 1.\n");
fork();
printf("test 2.\n");
}
Run Code Online (Sandbox Code Playgroud)
输出是:
测试1.
测试2.
测试1.
测试2.
我不应该得到......:
test1
test2
test2
我真的不明白这一点因为fork应该在fork()之后创建子进程; 而不是再次打印teste1.
当你打电话时printf,它不会立即打印任何文字.相反,它等到你打印了很多文本,或者你打电话fflush(stdout),或程序退出.(编辑:还有其他东西会导致打印缓冲文本)
当进程分叉时,它会复制未打印文本的缓冲区(其中包含"test 1. \n").然后两个进程在退出时打印"test 1. \n".
fflush(stdout)在fork()修复此问题之前调用,确保在进程分叉之前实际打印"test 1. \n".