标准I/O缓冲:全缓冲、行缓冲、无缓冲

说明:我只对网络资源进行了整合,方便学习~。~

基于流的操作最终会调用read或者write函数进行I/O操作。为了使程序的运行效率最高,流对象通常会提供缓冲区,以减少调用系统I/O库函数的次数。

基于流的I/O提供以下3种缓冲:

全缓冲:直到缓冲区被填满,才调用系统I/O函数。对于读操作来说,直到读入的内容的字节数等于缓冲区大小或者文件已经到达结尾,才进行实际的I/O操作,将外存文件内容读入缓冲区;对于写操作来说,直到缓冲区被填满,才进行实际的I/O操作,缓冲区内容写到外存文件中。磁盘文件通常是全缓冲的。

行缓冲:直到遇到换行符'/n',才调用系统I/O库函数。对于读操作来说,遇到换行符'/n'才进行I/O操作,将所读内容读入缓冲区;对于写操作来说,遇到换行符'/n'才进行I/O操作,将缓冲区内容写到外存中。由于缓冲区的大小是有限的,所以当缓冲区被填满时,即使没有遇到换行符'/n',也同样会进行实际的I/O操作。标准输入stdin和标准输出stdout默认都是行缓冲的。

无缓冲:没有缓冲区,数据会立即读入或者输出到外存文件和设备上。标准出错stderr是无缓冲的,这样保证错误提示和输出能够及时反馈给用户,供用户排除错误。

以上3种缓冲区分别定义为3个宏,其定义如下表所示。

 

缓冲区类型

定 义 的 宏

全缓冲

_IOFBF

行缓冲

_IOLBF

无缓冲

_IONBF

在使用上表所述的缓冲类型宏时,应将文件流对象中的缓冲区标志与该宏做"与"操作,判断结果是否为0即可知道该缓冲文件流的缓冲区是否属于该类型了。

具体例子参考 http://hi.baidu.com/hp_roc/blog/item/47eedcef85e2b7dfb31cb19e.html

 

几个退出函数:

1、exit ()。调用exit函数之后,它首先会执行一系列的清理处理,包括调用执行各终止处理程序,关闭所有标准IO流等,然后进入内核。

2、_exit ()。与exit不同的是,它不进行清理工作而直接进入内核。此函数由POSIX.1说明,放在unistd.h里面。

3、_Exit ()。同样,它也不进行清理工作而直接进入内核。此函数跟exit一样由ISO C说明,放在stdlib.h里面。

对于退出函数对于缓冲区冲洗的效果下面这个链接讲的比较详细:

http://blog.csdn.net/seton040/archive/2009/08/31/4504825.aspx

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值