版权所有 © 2014 tutorialspoint
fsync、fdatasync - 将文件的内存中状态与存储设备同步
#include <unistd.h> int fsync(int fd); int fdatasync(int fd);
int fsync(int fd);
int fdatasync(int fd);
fsync() 将文件描述符 fd 所引用的文件的所有已修改的内存中数据(即,已修改的文件缓冲区高速缓存页)传输(“刷新”)到该文件所在的磁盘设备(或其他永久存储设备)。该调用会阻塞,直到设备报告传输已完成。它还会刷新与文件关联的元数据信息(请参阅 stat(2))。
调用 fsync() 并不一定能确保包含该文件的目录中的条目也已写入磁盘。为此,还需要对该目录的文件描述符进行显式 fsync()。
fdatasync() 与 fsync() 类似,但不会刷新已修改的元数据,除非需要该元数据才能正确处理随后的数据检索。例如,对 st_atime 或 st_mtime(分别为上次访问时间和上次修改时间;请参阅 stat(2))的更改不需要刷新,因为它们对于正确处理随后的数据读取不是必需的。另一方面,对文件大小(st_size,例如由 ftruncate(2) 创建)的更改将需要刷新元数据。
fdatasync(2) 的目的是减少不需要将所有元数据与磁盘同步的应用程序的磁盘活动。
成功时,返回零。出错时,返回 -1,并且 errno 会相应地设置。
如果底层硬盘启用了写缓存,则当 fsync() / fdatasync() 返回时,数据可能实际上并不在永久存储中。
当 ext2 文件系统以 sync 选项挂载时,fsync() 也会隐式同步目录条目。
在 2.4 之前的内核中,对大型文件使用 fsync() 效率低下。另一种方法可能是使用 O_SYNC 标志打开 open(2)。
POSIX.1-2001
bdflush (2)
open (2)
sync (2)
sync_file_range (2)
hdparm (8)
mount (8)
sync (8)
update (8)
广告