为什么调用Main两次? [英] Why is main called twice?
本文介绍了为什么调用Main两次?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我刚刚了解了fork,根据我的理解,子进程从对fork的调用开始执行(否则fork将是递归的?)。
然而,在此代码中(ideone link):
int main() {
printf("%d: Common code1
", getpid());
if (fork() != 0) {
printf("%d: Parent code
", getpid());
} else {
printf("%d: Child code
", getpid());
}
printf("%d: Common code
", getpid());
}
输出为:
27380: Common code1
27380: Parent code
27380: Common code
27380: Common code1
27383: Child code
27383: Common code
我不明白为什么打印第4行?如果它是从子进程和名为main的派生进程打印的,但它是从父进程打印的,并且fork不调用main,我可以理解。
推荐答案
问得好!一开始我有点困惑。
使用printf
时,输出被缓冲。这意味着,printf
打印的内容实际上不会刷新到控制台,直到到达换行符,甚至直到程序终止(如果stdout被重定向)。
在这种情况下。父PID的标准输出缓冲区在派生过程中被复制到子进程。然后,父进程和子进程都会在终止之前写入其缓冲区。这将导致打印重复的数据。
Here是在调用fork()
之前包含fflush(stdout);
的理想链接。
这篇关于为什么调用Main两次?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文