社区
Linux/Unix社区
帖子详情
同步写讨论
ericming200409
2010-06-28 04:58:39
大家说说sync(), fsync(),fdatasync(),O_SYNC的区别。。。
...全文
154
8
打赏
收藏
同步写讨论
大家说说sync(), fsync(),fdatasync(),O_SYNC的区别。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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先来两句呗,抛个玉,引个砖,哈哈
Linux/Unix社区
23,121
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章