Возможно ли атомарное переименование в 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 показывают, что для успешного вызова необходимы только разрешения на чтение и запись.