LINUX.ORG.RU

Аналог win-реестра в unix


0

0

Программа требует структурированное хранилище для своих данных/настроек. Исходный код собирается для 2-х платформ: windows и unix.

В win-варианте естественно используется реестр, а в unix нужно предоставить достойную альтернативу. Привязываться к хранилищам от оконных менеджеров (типа GNOME или KDE) не хочется. Одно из решений - реализовать единый интерфейс, который в зависимости от платформы использовал бы либо реестр, либо, например, Berkeley DB c таблицей-деревом или xml файл, но... боюсь это будет изобретением велосипеда.

Существуют ли библиотеки с подобной функциональностью? Буду особо признателен, если Вы не просто перечислите варианты, но и поделитесь своими впечатлениями от их использования, бо это сэкономит мне кучу времени.


>Существуют ли библиотеки с подобной функциональностью?

Ну а чем GConf не понравился? Если избавиться от ложной стыдливости, я думаю, это как раз то, что нужно.

anonymous
()

xml - имхо вполне универсально

PETER ★★
()
Ответ на: комментарий от anonymous

Я бы назвал это стремлением избавиться от лишних зависимостей.

loki
() автор топика

Да, xml это универсально, однако нужен единый API, которым будет пользоваться программа. И если уже есть реализация этого API, то не зачем писать её самому (почему я и спрашиваю о существовании библиотек).

Есть ограничения и по обьёму - необходимость подключения многофункциональной библиотеки, из которой используются 1-2% от её API сомнительна.

loki
() автор топика
Ответ на: комментарий от loki

GConf ~ 2.3 Mb

ORBit ~ 0.8 Mb

Glib ~ 2.5 Mb

Это все размер архивов. Из этого кода не будет использоваться документация (хотя и она нужна) и максимум еще 1 Mb кода. О каких 1-2% идет речь? Что в GConf многофункционального? Это аналог реестра в Windows один в один.

А теперь представьте, что все это нужно будет писать самому.

anonymous
()

Я решал подобную задачу. Никаких библиотек не использовал. Я разделил хранение конфигурации на front-end (API которое использует программа) и back-end (то, где настройки хранятся). В Windows back-end'ом был реестр, в UNIX'ах - текстовый файл состоящий из таблиц в стиле Lua. Можно и сам Lua задействовать (http://www.lua.org), благо он совсем маленький (меньше чем GConf и libxml) и специально расчитан для использования в качестве парсера файлов конфигурации. Получилось все просто и удобно.

Могу поделиться исходниками.

asso_w
()
Ответ на: комментарий от asso_w

А этот текстовый файл разделялся между несколькими приложениями, как реестр? Если два приложения запускать одновременно и изменять настойки в обоих, получится ли просто и удобно? А уведомления об изменениях настроек Ваше приложение получает7 А какие типы данных доступны для хранения? Можно ли хранить списки?

anonymous
()
Ответ на: комментарий от anonymous

Этот конфиг использовался для приложения которое всегда запускается в единственном экземпляре, поэтому никаких уведомлений нет. Базовые типы данных - int, string, float. Списки хранить умеет, а так же любые иерархические стурктуры. Если нужно разделять конфиг между несколькими приложениями то лучше воспользоваться GConf.

asso_w
()

xml - является широко распространенным стандартом, поэтому есть смысл

использовать его. libxml можно портировать в винду (визуаль C, djgpp).

У меня как-то получалось многие пакеты портировать с использованием

borland c/c++. libxml не портировал, нужды не было.

anonymous
()

Итак, поступившие рекомендации:

1. Использовать Gconf (плюс видимо в его распространённости) 2. Включить в программу модуль Lua, (тут заодно решится и вопрос выбора DSL)

Кстати, разделённый доступ к хранилищу интересует больше в win-варианте, а в юниксовой версии такая задача не стоит.

Можно портировать libxml (для этих целей предпочитаю mingw). А libxml естественно потянет за собой libiconv, с другой стороны в WIN32 есть своя "нативная" либа - msxml. Только интерфейсы у них разные, т.е. опять же нужен frontend.

По возможностям мне понравился QSettings. Размер, правда великоват, даже , если использовать tinyQ ...

PS: Спасибо за ответы

loki
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.