QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1208|回复: 3

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

[复制链接]
发表于 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 这是为什么
发表于 2003-11-3 15:14:21 | 显示全部楼层
在linux系统中,fork()系统调用会将进程的所有(包括缓冲区)都
拷贝给子进程,而在缓冲区,如果加上printf("\n"); 则缓冲区的内容将向
标准输出输出,没有的话,则将暂时留在缓冲区,所以会拷贝给子进程。
回复

使用道具 举报

发表于 2003-11-3 16:08:20 | 显示全部楼层
你可以参考一下setvbuf()函数,重新设置一下,它的
默认方式是_IOLBF,是行缓冲的。
回复

使用道具 举报

发表于 2003-11-4 12:32:25 | 显示全部楼层
执行man setbuf,在setvbuf中说明:
1,终端流(一般是stdout)默认是行缓冲的
2,标准错误流stderr默认总是无缓冲的
3,一般所有的文件都是块缓冲的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 07:43 , Processed in 0.040756 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表