下列语句的含义是什么fsync 手册页
调用 fsync() 不一定确保包含该文件的目录中的条目也已到达磁盘。为此,还需要目录的文件描述符上的显式 fsync()。
这是否意味着当我对文件调用 fsync 时,fsync 不会更新目录元数据?
对于同一问题的另一个引用是(来自 Robert Love 的 Linux 系统编程书籍):
这两个函数都不能保证包含该文件的任何更新的目录条目都会同步到磁盘。这意味着,如果文件的链接最近已更新,则文件的数据可能会成功到达磁盘,但不会到达关联的目录条目,从而导致文件无法访问。
为什么文件的数据需要到达目录链接?如果我错了,请纠正我,但目录只包含该文件的文件名和索引节点号。实际数据在文件中。 “数据将到达文件但不会到达目录链接”是什么意思?
答案1
它的意思是:
如果文件的链接最近已更新
文件的数据可能会成功到达磁盘,但是
关联的目录项可能无法成功到达磁盘
使文件无法访问。
创建新文件时这可能是一个问题。
我会忽略对“文件链接”的概括,除非您知道正在创建硬链接。
这是否意味着当我对文件调用 fsync 时,fsync 不会更新目录元数据?
是的。或者更确切地说,你不能依赖它。 (有些实现可能总是在 fsync 返回之前更新它。)