mp3 发表于 2003-11-1 22:16:00

为何结果是这样呢???????

我编了一个最简单的程序:
#include <stdio.h>
#include <sched.h>
main()
{
putchar('a');
printf("\n");
fork();
printf("bye\n");
}
输出是 a
bye
bye
如果去掉printf("\n");
则输出
a
bye
a
bye 这是为什么

davidfox 发表于 2003-11-3 15:14:21

在linux系统中,fork()系统调用会将进程的所有(包括缓冲区)都
拷贝给子进程,而在缓冲区,如果加上printf("\n"); 则缓冲区的内容将向
标准输出输出,没有的话,则将暂时留在缓冲区,所以会拷贝给子进程。

davidfox 发表于 2003-11-3 16:08:20

你可以参考一下setvbuf()函数,重新设置一下,它的
默认方式是_IOLBF,是行缓冲的。

davidfox 发表于 2003-11-4 12:32:25

执行man setbuf,在setvbuf中说明:
1,终端流(一般是stdout)默认是行缓冲的
2,标准错误流stderr默认总是无缓冲的
3,一般所有的文件都是块缓冲的
页: [1]
查看完整版本: 为何结果是这样呢???????