zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

标准 缓冲
2023-09-14 09:10:19 时间

说明:我只网络资源整合,简单易学~。~

操作流程最后呼吁read或write功能I/O操作。为了使程序的效率最高。Stream对象通常提供缓冲。为了减少呼叫系统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