Обычно приложения выполняют атомарное сохранение, переименовывая старый файл и записывая новый файл на месте, или записывая временный файл, а затем заменяя старый файл новым временным файлом. Что из этого делает Emacs? Я нашел эту ссылку на обсуждение патча, но я не понимаю, что происходит.
1 ответ
Ответ в том, что это зависит от всевозможных факторов.
Во-первых, обратите внимание, что "переименование старого файла и запись нового файла на место" не является атомарным.
Emacs может сохранять различными способами:
- переименовать старый файл + записать на место (не атомарный, разрывает ссылки).
- не переименовывать, перезаписывать существующий файл (не атомарный, не разрывать ссылки).
- записать в новый файл, затем переименовать его (атомарный, разрывает ссылки).
Обратите внимание, что "разрыв ссылок" также подразумевает, что новый файл может иметь различные разрешения / владельца / ...
В большинстве случаев Emacs будет использовать второй подход (чтобы сохранить ссылки и разрешения). Но если ему нужно сделать резервную копию файла (в соответствии с make-backup-files
), то он часто будет использовать первый подход (где переименование используется для создания резервной копии), хотя это зависит от backup-by-copying
(а также другие переменные с именами, которые начинаются с backup-by-copying-when-
), а также file-precious-flag
и break-hardlink-on-save
.