Возможно ли атомарное переименование в Mac VFS / HFS +? - PullRequest
0 голосов
/ 11 января 2011

С поддержкой ACL в Mac OS X существует способ объявить файл как доступный для записи, но не удаляемый.

Это создает проблему с атомарными записями, поскольку текущая реализация из rename в VFS delete является уже существующей целью. Если у вас есть существующий файл, для которого у вас есть права на запись, возможно, не сможет атомарно записать в:
Просто подключите ACL, в котором указано deny delete, и элементарная запись (например, реализованная различными API-интерфейсами Cocoa - например, NSArray writeToFile:atomically:) завершится неудачно, тогда как неатомарная запись будет успешно выполнена.

Поскольку мое понимание низкоуровневого кода C довольно ограничено:
Возможна ли альтернативная реализация только с незначительными (вставьте ваше любимое определение «второстепенные») головными болями?

Спасибо

Daniel

1 Ответ

1 голос
/ 22 марта 2011

Может показаться, что приемлемая альтернатива - создать файл во временном каталоге, а затем вызвать exchangedata для обоих файлов.HFS экспортирует атрибут VOL_CAP_INT_EXCHANGEDATA, поэтому он должен работать.Соответствующие проверки в файле vfs_syscalls.c показывают, что для успешного вызова необходимы только разрешения на чтение и запись.

...