同步写讨论

ericming200409 2010-06-28 04:58:39
大家说说sync(), fsync(),fdatasync(),O_SYNC的区别。。。
...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nossiac 2010-07-06
  • 打赏
  • 举报
回复
APUE上解释得很清楚
sync是将IO的缓冲数据排进flush队列,它并不等待动作完成,直接就返回了。
fsync跟sync的区别是,fsync只针对某个文件,需要一个文件描述符作参数。
fdatasync跟fsync的区别是,fdatasync只更新文件的数据部分(数据块),而fsync不但flush数据,也flush文件描述(i结点)。有些系统并不支持这个函数。
O_SYNC是一个打开标志,一个文件描述符带着这个标志打开的时候,所有的写动作都会等到物理上完成才返回。
I小码哥 2010-06-30
  • 打赏
  • 举报
回复
恩 不错
ericming200409 2010-06-29
  • 打赏
  • 举报
回复
多谢楼上的回答
快乐田伯光 2010-06-29
  • 打赏
  • 举报
回复
fsync()跟O_SYNC不一样,
fsync()只是被调用的时候才会同步数据
而O_SYNC保证每次write的数据都到磁盘
[Quote=引用 3 楼 ericming200409 的回复:]
个人认为fsync()和O_SYNC是一样的,都是每次写的时候 都要等待物理输出的完成,而fdatasync()只是保证将写的数据同步到磁盘,而文件属性却不保证同步。至于sync(),unix环境高级编程上说只是将输出放入输出队列就返回,我想问的是数据是不是放入输出队列了,接下来就是等着输出到磁盘了
[/Quote]
快乐田伯光 2010-06-29
  • 打赏
  • 举报
回复
sync()不是针对某个文件,同步磁盘跟内核缓存的数据。
fsync是只同步某个文件的内核缓存跟磁盘数据
ericming200409 2010-06-29
  • 打赏
  • 举报
回复
个人认为fsync()和O_SYNC是一样的,都是每次写的时候 都要等待物理输出的完成,而fdatasync()只是保证将写的数据同步到磁盘,而文件属性却不保证同步。至于sync(),unix环境高级编程上说只是将输出放入输出队列就返回,我想问的是数据是不是放入输出队列了,接下来就是等着输出到磁盘了
ericming200409 2010-06-29
  • 打赏
  • 举报
回复
个人认为sync()和O_SYNC
非兔子_Logic0 2010-06-28
  • 打赏
  • 举报
回复
LZ先来两句呗,抛个玉,引个砖,哈哈

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧