2

目前我正在编写一个需要在本机端处理大量文件的 Android 应用程序。

最近我在更新或重命名这些文件时遇到了几个数据丢失或不一致的问题。(所有这些文件都存储在公共父/根目录的几个子目录中。)

在阅读了几篇关于 fsync() 的文章后,我决定使用它。但是我有一件事不清楚:

在父目录上调用 fsync() 是否保证递归地同步所有子目录的元数据?

也就是说,假设我对一个公共父目录中不同子目录中的多个文件进行了很多重命名操作。

那么我应该在每个子目录上分别调用 fsync() 还是在父目录上调用 fsync() 足以确保所有子目录(及其子目录递归)的元数据与物理设备同步?

基本上,这个想法是通过避免多次 fsync() 调用来节省时间。或者与每个单独的子目录上的 fsync() 相比,顶级目录上的 fsync() 是否需要更多时间?(假设顶级目录上的 fysnc() 同步所有子目录元数据)

4

1 回答 1

3

当在目录上调用 fsync 时,该操作将其目标视为文件而不是文件容器。从文件系统的角度来看,目录是一种特殊类型的文件,它恰好包含有关其他文件的元数据。当 fsync 应用于目录时,有关包含文件的元数据会同步,但子目录/文件本身不会同步。

如果要确保所有内容都正确同步,则应显式地 fsync 它们。

于 2013-07-12T13:55:48.080 回答