为什么在fork()之前的printf()会在fork()之后被执行?

9
如果在调用fork()后程序应该从跟随fork的第一条指令继续执行,那么为什么单词START会被打印两次?
#include<stdio.h>
#include<unistd.h>

int main(){
        int pid;
        printf("START...");
        pid = fork();
        printf("%d: I've got %d\n", getpid(), pid);
        return 0;
}

例如,可能的输出如下:

开始...605:我得到了606

开始...606:我得到了0

1个回答

7
因为您没有清空输出缓冲区,所以在调用fork()之后,文本存在于父进程和子进程的输出缓冲区中。
请在第一个printf()之后添加fflush(stdout);,并查看差异。

@ciamej 是的,但是那会给出(稍微)不同的输出。 - trojanfoe
@SergeyA 我不知道这是一个重复的问题。另外,为什么你没有问dasblinkenlight同样的问题呢? - trojanfoe
@SergeyA 如果您认为这是一个重复问题,那么请直接标记该问题,而不是与我交谈。 - trojanfoe
我做到了。全面披露 - 我也不是那个给你投反对票的人。我也相信讨论 - 也许我漏掉了什么,你的答案会补充在重复内容中缺失的细节? - SergeyA
@SergeyA 我刚接触C语言,甚至不知道清空缓冲区是什么。为什么会被认为是重复问题? - user6214276
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接