问:下面这些代码分别能打印出多少个A多少个B?
//1、
int main()
{
int i = 0;
for(; i <2 ; ++i)
{
if(fork () == 0)
{
printf("A\n");
}
else
{
printf("B\n");
}
}
exit(0);
}
结果为3A3B
//2、
int main()
{
int i = 0;
for(; i <2 ; ++i)
{
if(fork () == 0)
{
printf("A");
}
else
{
printf("B");
}
}
exit(0);
}
没有了\n输出缓冲区每次存入数据不会直接打印在屏幕上,而是存在缓冲区中直到缓冲区满或者进程结束才统一打印到屏幕上,因此第二轮复制的时候子进程会复制父进程中的缓冲区中的数据。
因此结果为4A4B。
//3、
int main()
{
int i = 0;
for(; i <2 ; ++i)
{
if(fork () &&fork ())
{
printf("A\n");
}
else
{
printf("B\n");
}
}
exit(0);
}
结果为1A2B