linux 同步IO: sync、fsync, O_SYNC

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函数的流程图:

linux 同步IO: sync、fsync, O_SYNC_第1张图片






你可能感兴趣的:(linux 同步IO: sync、fsync, O_SYNC)