对C中fork的理解[重复]

2023-11-24

我有一个我不明白的 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(使用前将#替换为@)

对C中fork的理解[重复] 的相关文章

随机推荐