Возможно ли атомарное переименование в Mac VFS/HFS+?

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

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

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

Спасибо

Даниил

1 ответ

Решение

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

Другие вопросы по тегам