函数sync fsync 和 fdatasync 的区别

本文介绍了Unix系统中的三种文件同步机制:sync、fsync和fdatasync。这些函数用于确保文件内容能够从内存缓冲区写入磁盘,对于提高数据一致性和实时性至关重要。sync将修改过的块缓存排入写队列但不等待写入;fsync针对特定文件描述符,等待数据写入磁盘;fdatasync与fsync类似,但仅同步文件数据而不包括元数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        一般的unix系统实现在内核中都会设有缓冲区高速缓冲或页高速缓存。当我们从磁盘读取文件时,一般都会设置一个缓冲区,先把文件内容读取到缓冲区中,然后再从该缓冲区中读取内容。把数据写入磁盘文件时也是一样,一般都会先把数据缓存到缓存区,然后由内核启动的一个进程来定时(一般是30秒)地把内容写入到磁盘中。

        而在 unix 中有这三个函数影响到文件的写入操作。下面介绍这三个函数的区别:

1. 函数原型

#include<unistd.h>

void sync(void);
int fsync(int fd);
int fdatasync(int fd);

                                                             返回值:若成功,返回0;若出错,返回-1

2. 区别

    (1). sync 函数只是将修改过的块缓存区排入写队列,然后就返回。并不等待实际写入磁盘。

    (2). fsync 指定某个文件描述符 fd指定的一个文件起作用,然后等待数据写入磁盘才返回。这种性质一般用于数据库的更新。

   (3). fdatasync 函数类似于 fsync, 但它只影响到文件的数据。而 fsync 会更新文件的数据和属性(比如说文件的更新时间等文件属性)。

3. 总结

    根据这三个函数的特征,一般来说当你的应用无需延迟 异步,数据的实时性要求没那么高,最终只要数据一致性就可以时,调用 sync 就可以来。而 当对数据的实时性要求比较高时,可采用 fsync 同步更新数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值