3

Обычно приложения выполняют атомарное сохранение, переименовывая старый файл и записывая новый файл на месте, или записывая временный файл, а затем заменяя старый файл новым временным файлом. Что из этого делает Emacs? Я нашел эту ссылку на обсуждение патча, но я не понимаю, что происходит.

1 ответ1

2

Ответ в том, что это зависит от всевозможных факторов.

Во-первых, обратите внимание, что "переименование старого файла и запись нового файла на место" не является атомарным.

Emacs может сохранять различными способами:

  • переименовать старый файл + записать на место (не атомарный, разрывает ссылки).
  • не переименовывать, перезаписывать существующий файл (не атомарный, не разрывать ссылки).
  • записать в новый файл, затем переименовать его (атомарный, разрывает ссылки).

Обратите внимание, что "разрыв ссылок" также подразумевает, что новый файл может иметь различные разрешения / владельца / ...

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .