理解C中的Fork

use*_*925 6 c

我有一个问题用叉子,我不会丢脸.

    #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.

use*_*751 5

当你打电话时printf,它不会立即打印任何文字.相反,它等到你打印了很多文本,或者你打电话fflush(stdout),或程序退出.(编辑:还有其他东西会导致打印缓冲文本)

当进程分叉时,它会复制未打印文本的缓冲区(其中包含"test 1. \n").然后两个进程在退出时打印"test 1. \n".

fflush(stdout)fork()修复此问题之前调用,确保在进程分叉之前实际打印"test 1. \n".