У меня есть два процесса - пользовательский процесс и LaunchDaemon корневого уровня. Мне бы хотелось, чтобы оба процесса имели общие настройки. Я пытался заставить это работать через базу данных sqlite, но столкнулся с проблемами коррупции. Я думал об использовании NSUserDefaults
, но NSGlobalDomain
кажется глобальным для пользователя, и мне нужен постоянный межпользовательский домен, который NSUserDefaults
, по-видимому, не обеспечивает.
Я пытался читать и записывать XML-файл напрямую, и я могу заставить его нормально работать с несколькими потоками (через простой NSLock
), но когда я пытаюсь применить O_EXLOCK
к файлу, чтобы предотвратить один процесс от записи в файл, в то время как другой, похоже, не работает.
CFPreferences
, похоже, имеет большинство тех же проблем, что и NSUserDefaults
. Существует константа kCFPreferencesAnyUser
, но в документации сказано, что я могу использовать ее только при наличии привилегий администратора (которых нет у пользовательского процесса).
Так что мой вопрос таков:
Как эффективно реализовать межпроцессные и межпользовательские настройки общего доступа?