...

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

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

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

Спасибо

Даниил

Ответы на вопрос(1)

Решение Вопроса

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

 danyowdee22 мар. 2011 г., 19:56
Приятно! Я не знал оexchangedata...

Ваш ответ на вопрос