首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.io.FileDescriptor#sync()是否特定于单个FileDescriptor

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

Stack Overflow用户
提问于 2012-12-04 18:45:41
回答 1查看 2.4K关注 0票数 6

我希望在我的应用程序中的某些点写入文件后,强制同步到磁盘。因为它是在Linux上运行的,所以我可以只运行

代码语言:javascript
复制
Runtime.getRuntime().exec("sync");

但是,我不想引入特定于Linux的系统调用,而是使用

代码语言:javascript
复制
java.io.FileDescriptor#sync();

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

代码语言:javascript
复制
FileDescriptor.in.sync();

这是一种有效的方法吗?结果是否与在Linux中调用sync的结果相匹配?

如果有人知道是否/如何可以访问VFS中的底层FileDescriptor,那么知道也是很有用的。

编辑:看起来

代码语言:javascript
复制
FileDescriptor.in.sync();

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

代码语言:javascript
复制
new FileOutputStream(new File("anyfile")).getFD().sync();

绝对有效,并且调用此命令的结果与直接调用Linux sync命令的结果相匹配。然而,它涉及到打开和关闭冗余的文件输出流,所以它并不是很理想。有没有其他原因这可能是一个坏主意,因为它看起来确实有效?有没有其他方法可以获得一个可以用来同步的FileDescriptor?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 00:37:10

前段时间我研究过这样的问题:Question 1Question 2

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13701137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档