如果有这样一段代码:
{
printf("B");
int fpid = fork();
}
那么B应该是会被输出两遍的,原因在于printf在遇到fork时被阻塞,然后在新的进程中继续执行,此时缓冲区中还是有B的,相当于在新老进程中各输出了一遍。
解决方法:在中间加入fflush(stdout)
{
printf("B");
fflush(stdout);
int fpid = fork();
}
fflush(stdout)会清空当前缓冲区内容,使得新的进程不会输出B。
如果输出的是"B\n",则 fflush(stdout)加不加就无所谓了,因为换行符会自动清空缓冲区内容。