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