同步化I/O

1、fsync()和fdatasync()

#include <unistd.h>

int fsync (int fd);

int fdatasync (int fd);

fsync()调用可确保文件描述符fd所映射的文件中所有脏数据(数据和元数据)会被写回磁盘。fdatasync()和fsync()的行为一样,但是它只会刷新数据,无法保证元数据与磁盘是同步的,因此速度可能更快。


2、sync()

#include <unistd.h>
void sync (void);
此调用可让所有缓冲区与磁盘同步化,总能成功并返回,所有缓冲区(包括数据和元数据)保证都会写回磁盘。


3、O_SYNC标志

将O_SYNC标志传递给open()表示文件的所有I/O都需要同步化。


4、直接I/O

将O_DIRECT标志传递给open()可指示内核尽量减少I/O管理在场的机会。提供此标志时,会绕过页面缓存直接启动用户空间缓冲区与设备之间的I/O。所有I/O将会同步,直到操作完成才会返回。

直接I/O时,请求的长度、缓冲区的调整以及文件的偏移量都必须是底层设备的扇区大小(通常就是512字节)的整数倍。

转载于:https://my.oschina.net/u/1022744/blog/145763

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值