为何结果是这样呢???????
我编了一个最简单的程序:#include <stdio.h>
#include <sched.h>
main()
{
putchar('a');
printf("\n");
fork();
printf("bye\n");
}
输出是 a
bye
bye
如果去掉printf("\n");
则输出
a
bye
a
bye 这是为什么 在linux系统中,fork()系统调用会将进程的所有(包括缓冲区)都
拷贝给子进程,而在缓冲区,如果加上printf("\n"); 则缓冲区的内容将向
标准输出输出,没有的话,则将暂时留在缓冲区,所以会拷贝给子进程。 你可以参考一下setvbuf()函数,重新设置一下,它的
默认方式是_IOLBF,是行缓冲的。 执行man setbuf,在setvbuf中说明:
1,终端流(一般是stdout)默认是行缓冲的
2,标准错误流stderr默认总是无缓冲的
3,一般所有的文件都是块缓冲的
页:
[1]