目前我正在编写一个 Android 应用程序,需要在 native 端处理大量文件。
最近,我在更新或重命名这些文件时遇到了一些数据丢失或不一致的问题。 (所有这些文件都存储在公共(public)父/根目录的几个子目录中。)
阅读了几篇有关 fsync() 的文章后,我决定使用它。 但是我有一点不清楚:
在父目录上调用 fsync() 是否能保证所有子目录的元数据递归同步?
也就是说,假设我对公共(public)父目录中不同子目录中的多个文件进行了大量重命名操作。
那么我应该分别在每个子目录上调用 fsync() 还是在父目录上调用 fsync() 就足以确保所有子目录(及其递归子目录)的元数据与物理同步设备?
基本上,这个想法是通过避免多次 fsync() 调用来节省时间。或者与每个子目录上的 fsync() 相比,顶级目录上的 fsync() 会花费更多时间吗? (假设顶级目录上的fysnc()同步所有子目录元数据)
最佳答案
当对目录调用 fsync 时,该操作将其目标视为文件而不是文件容器。从文件系统的角度来看,目录是一种特殊的文件,它恰好包含有关其他文件的元数据。当 fsync 应用于目录时,有关所包含文件的元数据将被同步,但子目录/文件本身不会同步。
如果您想确保所有内容都正确同步,那么您应该显式地同步它们。
关于android - 父目录的fsync是否保证所有递归子目录的元数据同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17616485/