1

这是原子文件更新的典型众所周知的方法:

fd = open(“foo.new”, O_WRONLY);
write(fd, buf, bufsize);
fsync(fd);
close(fd);
rename(“foo.new”, “foo”);

一般来说,如果我们还想要持久性(即保证版本的文件在崩溃时可用),那么我们还需要调用fsync父目录。

问:UBIFS 也需要这个吗?文档说:

可以为目录调用 fsync() - 它同步目录 inode 元数据。[...]

对目录的 fdatasync() 调用在 UBIFS 中是“无操作”,并且所有更改目录条目的 UBIFS 操作都是同步的。

如果我没看错,后者(“所有更改目录条目的 UBIFS 操作都是同步的”)似乎暗示fsync不需要调用父目录。然而,我的测试似乎表明并非如此。我是误读了文档,还是这些信息过时了?

4

1 回答 1

0

我在 MTD 邮件列表上问过;似乎文档是模棱两可的,并且在其他文件系统中调用fsync父目录是必要的。

于 2018-12-11T15:51:39.647 回答