可能重复:
Working of fork() in linux gcc
Why does this code print two times?
我想知道以下代码输出背后的原因:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
FILE *fp;
int n;
printf("%d",45);
//fflush(stdout);
if((n=fork())>0){
printf("in parent\n");
exit(0);
}
else if(n==0)
printf("%d",45);
}
输出是
45inparent
4545
如果我使用fflush,则输出是
45inparent
45
另外,我正在linux平台上运行
答案 0 :(得分:2)
第一个printf()将字符串45
写入内存缓冲区。
在fork()调用期间,缓冲区在子进程中实际上是重复的,因此父进程和子进程在stdout的缓冲区中都有45
。
在两个进程中刷新缓冲区将写入45
两次。
答案 1 :(得分:2)
子进程继承了打开的文件描述符(在本例中为stdout)和与之关联的缓冲区。