加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java.io.FileDescriptor#sync()是否特定于单个FileDescriptor

发布时间:2020-12-14 19:24:23 所属栏目:Java 来源:网络整理
导读:我希望在我的应用程序中的某些点写入文件后强制同步到磁盘.因为它在 Linux上运行,所以我可以逃避运行 Runtime.getRuntime().exec("sync"); 但是,我宁愿不介绍Linux特定的系统调用,而宁愿使用 java.io.FileDescriptor#sync(); 但是,我使用Apache VFS在本地文
我希望在我的应用程序中的某些点写入文件后强制同步到磁盘.因为它在 Linux上运行,所以我可以逃避运行
Runtime.getRuntime().exec("sync");

但是,我宁愿不介绍Linux特定的系统调用,而宁愿使用

java.io.FileDescriptor#sync();

但是,我使用Apache VFS在本地文件系统上执行操作,据我所知,它不提供对底层文件描述符的访问.但是,我是否需要访问刚刚写入的实际文件描述符以强制同步?例如,我是否可以不使用任何FileDescriptor来调用同步效果

FileDescriptor.in.sync();

这是一种有效的方法,结果是否与Linux中调用同步的结果相匹配?

万一有人知道是否可以如何访问VFS中的底层FileDescriptor,那么知道也是有用的.

编辑:看起来

FileDescriptor.in.sync();

不想在Linux上运行(虽然它在从Eclipse运行时可以在我的Windows机器上运行),但是

new FileOutputStream(new File("anyfile")).getFD().sync();

肯定是有效的,调用它的结果与直接调用Linux sync命令的结果相匹配.但是,它涉及打开和关闭冗余文件输出流,因此它并不完全理想.任何其他原因这可能是一个坏主意,因为它似乎有效吗?是否有其他方法可以获得可用于同步的FileDescriptor?

解决方法

我前段时间调查过这些问题: Question 1,Question 2.

在Linux中,java.io.FileDescriptor#sync调用确保将与描述符关联的文件的已修改数据发送到磁盘. (那个便宜的磁盘倾向于跳过写入,只将数据放在不可靠(也就是没有NVRAM)的写缓存中是一个不同/另外的问题.)
它不保证也会写回其他文件的修改数据.这不是同步合同或基础fsync POSIX function.

但是,在某些情况下(例如数据中的ext3 =有序模式),an fsync on a file writes back up modified data of the file system.这非常有趣,因为这可能会因为某些其他应用程序创建了大量脏块而产生了显着的延迟.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读