sync,fsync,fdatasync in Linux

这三个函数用于实现磁盘数据的同步问题。

Unix操作系统在大部分磁盘(disl)IO操作的时候在内核使用了buffer cache or page cache。当我们向文件写入数据的时候,数据经常被内核复制到缓冲区中,排队地等待被写入disk(磁盘)。这被称为delayed write(延迟写入)。通常当内核需要将buffer用于其他磁盘块的时候,会将所有延迟写入的数据全部写入到disk(磁盘)中去。为了确保disk上的文件系统和buffer cache内容的一致性。系统提供了sync,fsync,fdatasync这些函数。
函数原型如下:

#include <unistd.h>

int fsync(int fd);
int fdatasync(int fd);
//Returns: 0 if OK, -1 on error
void sync(void);

sync

其简单的将所有用于写入已经被修改的块(modified block)排列起来。sync不等待磁盘写入操作的发生。(disk writes to take place).
sync通常被系统守护程序(system daemon)周期性调用(约30秒),被称之为update,这能确保内核block buffers的周期性flush。命令sync(1)也能调用sync函数。

fsync

fsync仅仅适用于单个文件(由fd指定的文件),然后等待磁盘写入操作的完成才返回。fsync在应用程序中可以被用在database(数据库)上,因为数据库需要确保修改的数据已经写入到了刺盘中

fdatasync

fdatasync类似于fsync,只是仅仅影响文件的数据区域。和fsync一样,文件的属性也会被同步更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值