深入探讨标准I/O与高级文件I/O技术
1. 标准I/O的基本操作
1.1 fflush函数
fflush() 函数用于将流中未写入的数据刷新到内核。若流指针为 NULL ,则会刷新进程中所有打开的输入流。调用成功时返回0,失败则返回 EOF ,并设置相应的 errno 。
要理解 fflush() 的效果,需明白C库维护的缓冲区和内核自身缓冲区的区别。本章描述的所有调用都使用C库维护的缓冲区,该缓冲区位于用户空间而非内核空间,这正是性能提升的关键所在,因为操作都在用户空间进行,减少了系统调用的次数,仅在需要访问磁盘或其他介质时才会发起系统调用。
fflush() 只是将用户缓冲区的数据写入内核缓冲区,其效果等同于不使用用户缓冲而直接使用 write() 。但它并不能保证数据已物理写入介质,若要确保这一点,可使用 fsync() 。通常建议先调用 fflush() ,再立即调用 fsync() ,即先确保用户缓冲区的数据写入内核,再确保内核缓冲区的数据写入磁盘。
1.2 错误和文件结束检查
部分标准I/O接口(如 fread() )在向调用者反馈失败情况时表现不佳,因为它们没有区分错误和文件结束(EOF)的机制。为解决这一问题,标准I/O提供了以下接口:
- fer
超级会员免费看
订阅专栏 解锁全文
1168

被折叠的 条评论
为什么被折叠?



