缓存冲洗函数

传统的 UNIX 系统实现在内核中都设有缓冲区高速缓存或页高速缓存,大多数磁盘 I/O 都通过缓冲区进行。当向文件写入数据时,内核通常首先将数据复制到缓冲区中,然后排入队列,晚些时候再写入磁盘。这种方式被称为“延迟写(delayed write)”。
通常,当内核需要重用缓冲区来存放其他磁盘块数据时,它会把所有延迟写数据块写入磁盘。为了保证磁盘上实际文件系统与缓冲区中内容的一致性,UNIX 系统提供了 sync、fsync 和fdatasync 三个函数。

#include <unistd.h>

int fsync(int fd);
int fdatasync(int fd);
/* 返回值:若成功,返回0;否则,返回 -1 */
void sync(void);

sync 只是将所有修改过的块缓冲区排入写队列,然后就返回,并不等待实际写磁盘操作结束。通常,称为 update 的系统守护进程周期性地调用(一般每隔 30 秒)sync 函数,这就保证了定期冲洗(flush)内核的块缓冲区。UNIX 命令 sync(1) 也调用 sync 函数。
fsync 函数只对由文件描述符 fd 指定的一个文件起作用,并且等待写磁盘操作结束才返回。fsync 可用于数据库这样的应用程序,这种程序需要确保修改过的块立即写到磁盘上。
fdatasync 类似于 fsync,但它只影响文件的数据部分。而除数据外,fsync 还会同步更新文件的属性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值