fsync() - Unix,Linux 系统调用 - 技术教程
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于TP  

fsync() - Unix,Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

fsync、fdatasync - 将文件的内存中状态与存储设备同步

语法

#include <unistd.h> 

int fsync(int fd);

int fdatasync(int fd);

描述

fsync() 将文件描述符 fd 所引用的文件的所有已修改的内存中数据(即,已修改的文件缓冲区高速缓存页)传输(“刷新”)到该文件所在的磁盘设备(或其他永久存储设备)。该调用会阻塞,直到设备报告传输已完成。它还会刷新与文件关联的元数据信息(请参阅 stat(2))。

调用 fsync() 并不一定能确保包含该文件的目录中的条目也已写入磁盘。为此,还需要对该目录的文件描述符进行显式 fsync()。

fdatasync() 与 fsync() 类似,但不会刷新已修改的元数据,除非需要该元数据才能正确处理随后的数据检索。例如,对 st_atimest_mtime(分别为上次访问时间和上次修改时间;请参阅 stat(2))的更改不需要刷新,因为它们对于正确处理随后的数据读取不是必需的。另一方面,对文件大小(st_size,例如由 ftruncate(2) 创建)的更改将需要刷新元数据。

fdatasync(2) 的目的是减少不需要将所有元数据与磁盘同步的应用程序的磁盘活动。

返回值

成功时,返回零。出错时,返回 -1,并且 errno 会相应地设置。

错误

标签描述
EBADF fd 不是一个有效的用于写入的文件描述符。
EIO 同步期间发生错误。
EROFSEINVAL fd 绑定到不支持同步的特殊文件。

备注

如果底层硬盘启用了写缓存,则当 fsync() / fdatasync() 返回时,数据可能实际上并不在永久存储中。

当 ext2 文件系统以 sync 选项挂载时,fsync() 也会隐式同步目录条目。

在 2.4 之前的内核中,对大型文件使用 fsync() 效率低下。另一种方法可能是使用 O_SYNC 标志打开 open(2)。

符合标准

POSIX.1-2001

另请参阅



previous next Printer Friendly

广告


  

广告



广告
© . All rights reserved.