LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1377|回复: 3

APUE

[复制链接]
发表于 2010-4-18 14:33:54 | 显示全部楼层 |阅读模式
APUE 中有这样一段话,是什么意思? 不明白到底在什么情况下所有Line-buffered 输出流会被flush。没搞明白!

Second, whenever input is requested through the standard I/O library from either (a) an unbuffered stream or (b) a line-buffered stream (that requires data to be requested from the kernel), all line-buffered output streams are flushed. The reason for the qualifier on (b) is that the requested data may already be in the buffer, which doesn't require data to be read from the kernel. Obviously, any input from an unbuffered stream, item (a), requires data to be obtained from the kernel.

一不小心点了Enter,就提交了,为什么不能编辑标题呀? 自己发的帖,为什么自己不能删除呢?
发表于 2010-4-19 00:00:21 | 显示全部楼层
凑合着看吧~~~~~~~~~~~~`:
其次,在无论任何时候,(a)一个非缓冲数据流或(b)一个线性缓冲数流(所需数据流曾被系统核心获得)通过标准输入/输出库要求输入时,所有的线性缓冲输出数据流都被刷新。原因就是(b一个线性缓冲数流)所限定的就是请求输入的数据流已经存在于缓冲区中,不需要再次从核心读入。很明显每一个来自非缓冲数据流、标题(a属于非缓冲数据流)的数据流都曾缓冲在系统核心中了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-19 22:33:21 | 显示全部楼层
Post by billpeng;2083841
凑合着看吧~~~~~~~~~~~~`:
其次,在无论任何时候,(a)一个非缓冲数据流或(b)一个行缓冲数流(所需数据流曾被系统核心获得)通过标准输入/输出库要求输入时,所有的行缓冲输出数据流都被刷新。原因就是(b一个行缓冲数流)所限定的就是请求输入的数据流已经存在于缓冲区中,不需要再次从核心读入。很明显每一个来自非缓冲数据流、标题(a属于非缓冲数据流)的数据流都曾缓冲在系统核心中了。


没听明白,能不能举个例子? 或者用自己的话意译一下?
各位高手支招啊!!!!
回复 支持 反对

使用道具 举报

发表于 2010-6-14 22:51:19 | 显示全部楼层
Post by guo333806;2084143
没听明白,能不能举个例子? 或者用自己的话意译一下?
各位高手支招啊!!!!


和终端关联的都是行缓冲。之所以要设置这个当通过输入行缓冲流从内核取得数据(即意味着要求用户在终端上输入数据)就刷新输出行缓冲区的规定,就是为了在用户输出前打印提示内容吧,因为行缓冲一般都是关联到终端上,也就是说一般是用来人机交互的。人机交互的一般流程都应该是程序在终端上打印一个提示,然后用户根据提示输入数据这样的。如果没有这项,而写程序的人用printf又没加换行符,则程序跑到这块的时候,没有任何提示(因为行缓冲未刷新)光标就开示闪动提示用户输入了,估计用的人会很晕(让我输入啥啊?)。所以才有了这顶规定吧,个人理解。
回复 支持 反对

使用道具 举报

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

本版积分规则

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