当前位置: 技术问答>linux和unix
同步写讨论
来源: 互联网 发布时间:2016-09-08
本文导语: 大家说说sync(), fsync(),fdatasync(),O_SYNC的区别。。。 | APUE上解释得很清楚 sync是将IO的缓冲数据排进flush队列,它并不等待动作完成,直接就返回了。 fsync跟sync的区别是,fsync只针对某个文件,需...
大家说说sync(), fsync(),fdatasync(),O_SYNC的区别。。。
|
APUE上解释得很清楚
sync是将IO的缓冲数据排进flush队列,它并不等待动作完成,直接就返回了。
fsync跟sync的区别是,fsync只针对某个文件,需要一个文件描述符作参数。
fdatasync跟fsync的区别是,fdatasync只更新文件的数据部分(数据块),而fsync不但flush数据,也flush文件描述(i结点)。有些系统并不支持这个函数。
O_SYNC是一个打开标志,一个文件描述符带着这个标志打开的时候,所有的写动作都会等到物理上完成才返回。
sync是将IO的缓冲数据排进flush队列,它并不等待动作完成,直接就返回了。
fsync跟sync的区别是,fsync只针对某个文件,需要一个文件描述符作参数。
fdatasync跟fsync的区别是,fdatasync只更新文件的数据部分(数据块),而fsync不但flush数据,也flush文件描述(i结点)。有些系统并不支持这个函数。
O_SYNC是一个打开标志,一个文件描述符带着这个标志打开的时候,所有的写动作都会等到物理上完成才返回。
|
sync()不是针对某个文件,同步磁盘跟内核缓存的数据。
fsync是只同步某个文件的内核缓存跟磁盘数据
fsync是只同步某个文件的内核缓存跟磁盘数据
|
fsync()跟O_SYNC不一样,
fsync()只是被调用的时候才会同步数据
而O_SYNC保证每次write的数据都到磁盘
fsync()只是被调用的时候才会同步数据
而O_SYNC保证每次write的数据都到磁盘