系统调用fork():创建一个新进程,新进程是原进程的子进程;父进程返回子进程的ID,子进程返回0;
有趣的是,下面两个程序,其中一个加入 fflush 后,就会从fflush处运行子进程(父进程),也就是第二个进程会从fflush处开始运行,而fork之上的代码不运行了
另外一个没有加fflush,第二个进程会把fork() 上面的代码运行。我感觉是因为fork上面的内容在缓冲区的原因,在fork() 之前还没有输出,留在了缓冲区内,加上fflush后,缓冲区的内容就为空了。所以就没有输出fork()上面的语句。
插一张哈工大李志军老师讲解题目的图片:
#include <stdio.h>
int main()
{
puts("---");
fflush(stdout);
puts("*");
puts("???00");
if(!fork())
{
printf("%c",'A');
fflush(stdout);
}
printf("%c",'B');
fflush(stdout);
fork();
printf("%c",'C');
fflush(stdout);
return 0;
}
结果:
--- * ???00 BCC* ???00 ABCC
#include <stdio.h>
int main()
{
puts("---");
puts("*");
puts("???00");
if(!fork())
{
printf("%c",'A');
fflush(stdout);
}
printf("%c",'B');
fflush(stdout);
fork();
printf("%c",'C');
fflush(stdout);
return 0;
}
--- * ???00 BCC--- * ???00 ABCC