当前位置:嗨网首页>书籍在线阅读

25-O_DSYNC和O_RSYNC

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.4.4 O_DSYNC和O_RSYNC

POSIX标准为open()调用定义了另外两个同步I/O相关的标志位:O_DSYNC和O_RSYNC。在Linux上,这些标志位的定义和O_SYNC一致,其行为完全相同。

O_DSYNC标志位指定每次写操作后,只同步普通数据,不同步元数据。O_DSYNC的功能可以理解为在每次写请求后,隐式调用fdatasync()。因为O_SYNC提供了更严格的限制,把O_DSYNC替换成O_SYNC在功能上完全没有问题,只有在某些严格需求场景下才会有性能损失。

O_RSYNC标志位指定读请求和写请求之间的同步。该标志位必须和O_SYNC或O_DSYNC一起使用。正如前面所提到的,读操作总是同步的——只有当有数据返回给用户时,才会返回。O_RSYNC标志位保证读操作带来的任何影响也是同步的。也就是说,由于读操作导致的元数据更新必须在调用返回前写入磁盘。在实际应用中,可以理解成在read()调用返回前,文件访问时间必须更新到磁盘索引节点的副本中。在Linux中,O_RSYNC和OSYNC的含义相同,虽然这没有什么意义(与O \_ SYNC和O `\` DSYNC的子集关系不同)。在Linux中,O_RSYNC无法通过当前行为来解释,最接近的理解是在每次read()调用后,再调用fdatasync()。实际上,这种行为极少发生。