Linux文件I/O操作全解析
1. 同步I/O
- fsync()和fdatasync() :硬盘可能会向内核报告缓冲区已存在于磁盘上,但实际上它们仍在磁盘缓存中。由于POSIX要求实现
fsync(),而fdatasync()是可选的,因此在任何常见的Linux文件系统上,对于常规文件都应始终实现fsync()系统调用。不过,非典型文件类型(可能没有元数据需要同步的文件)或特殊文件系统可能只实现fdatasync()。 - sync() :
sync()系统调用用于将所有缓冲区同步到磁盘。它的范围更广,但效率较低。其函数原型如下:
#include <unistd.h>
void sync (void);
该函数没有参数和返回值,总是会成功执行。返回时,所有缓冲区(包括数据和元数据)都保证已存在于磁盘上。标准并不要求 sync() 在所有缓冲区刷新到磁盘后才返回,只要求该调用启动将所有缓冲区提交到磁盘的过程。因此,通常建议多次调用 sync() 以确保所有数据安全地存储在磁盘上。不过,Linux会等待所有缓冲区提交完成,所以单次调用 sync() 就足够了。 sync() 主要用于实现
超级会员免费看
订阅专栏 解锁全文
3670

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



