sync和fsync baidu一下,有大量文章说明其作用。
下面举一个来自csdn的blog文章:
http://blog.youkuaiyun.com/cywosp/article/details/8767327
其中说明如下:
sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。
fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。
PS:open时的参数O_SYNC有着和fsync类似的语义:使每次write都会阻塞等待硬盘IO完成。
其中 大部分网络文章对sync的说明,都说是仅将块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。
即,sync并非同步操作,而是异步的。也就是无法保证sync成功后,内容不一定保存到物理存储介质了!!!
通过仔细分析sync函数,发现实际上大部分人理解是错误的,sync函数是会等待实际写结束,然后才返回的。
请看下面sync函数的流程图:
本文纠正了关于Linux同步IO中sync函数的常见误解,指出sync不仅将修改过的块缓冲区排入写队列,而且会等待实际写入磁盘操作完成再返回,确保数据安全保存。同时,对比了fsync函数的作用,它只对指定文件进行同步操作,并等待写操作结束。最后提到了O_SYNC打开文件时的效果,与fsync类似,每次write都会阻塞直到硬盘IO完成。
2395

被折叠的 条评论
为什么被折叠?



