最近做保存数据到文件操作,有2个数据,一个是视频,一个是小数据,一样的操作函数,保存视频没有问题,但保存数据就不行,仔细查看,
保存视频数据时,由于视频数据都比较大,我每收到64kB保存一次,没有问题,
问题就出现 在保存信息数据上,这个数据量比较小,一秒10B,我不可能收到64KB再保存,于是 我就想着fsync同步一下,
上面的程序,实际是不行的,虽然写数据成功,同步数据也成功,但是数据根本没有保存到磁盘里,
要想真正保存到磁盘里,在加fflush(),就可以了,
我的理解+解释:fflush把内核中的数据 清到stream中, fsync把文件属性更新, 如果stream流中没有数据,则只调用fsync是不起作用的。事实也证明了这一点。
仅仅是把上层缓冲区中的数据刷新到内核缓冲区就返回,因此相对于fsync而言不是很安全,还需要再调用一下fsync来把数据真正写入硬盘。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226661.html原文链接:https://javaforall.net
