父目录的fsync是否保证所有递归子目录的元数据同步?

时间:2013-07-12 13:49:25

标签: android linux native ext4 fsync

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

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

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

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

也就是说,我可以在公共父目录中的不同子目录中对多个文件进行大量重命名操作。

然后我应该分别在每个子目录上调用fsync(),或者在我的父目录上调用fsync()就足以确保所有子目录(及其子目录递归)的元数据与物理同步设备

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

1 个答案:

答案 0 :(得分:2)

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

如果您想确保所有内容都已正确同步,那么您应该明确地对它们进行同步。