2011-01-11 6 views
0

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

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

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

Благодаря

Daniel

ответ

1

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

+0

Ницца! Я не знал о «exchangedata» ... – danyowdee