通常,应用程序通过重命名旧文件并在原地写入新文件,或者通过写入临时文件然后用新临时文件替换旧文件来执行原子保存。emacs 会执行其中哪一项?我发现此链接参与补丁讨论,但我不明白发生了什么。
答案1
答案是这取决于各种因素。
首先,请注意“重命名旧文件并在适当位置写入新文件”不是原子的。
Emacs 可以通过多种方式保存:
- 重命名旧文件+就地写入(非原子,中断链接)。
- 不要重命名,覆盖现有文件(非原子,不会破坏链接)。
- 写入新文件,然后重命名(原子,中断链接)。
请注意,“断开链接”也意味着新文件可能具有不同的权限/所有者/......
在大多数情况下,Emacs 将使用第二种方法(为了保留链接和权限)。但如果需要备份文件(根据make-backup-files
),则它通常会使用第一种方法(使用重命名来创建备份),尽管这取决于backup-by-copying
(以及其他以 开头的变量backup-by-copying-when-
)以及file-precious-flag
和break-hardlink-on-save
。