据我所知,fork创建了一个重复的进程,但它也复制了它的程序计数器,所以它继续从它后面的行继续但是为什么这个代码在fork之前打印hello world两次
#include <stdio.h>
#include <sys/wait.h>
int main()
{
printf("Hello World");
fork();
wait(NULL);
return 0;
}
答案 0 :(得分:3)
printf
实际上并不打印 - 它实际上只是将数据放入缓冲区以便稍后打印。当缓冲区被刷新时,它实际上会被打印出来,这可能以各种方式发生。
在你的情况下,缓冲区刷新直到fork之后才会发生,所以父和子都有一个字符串的副本,当它们分叉时要在缓冲区中打印,并且最终都打印它。 / p>