Выезд CCAN ciniparser . Это вилка оригинального iniparser (который больше не поддерживается) и облегчает анализ файлов конфигурации в стиле INI.
Код из примера (почти зеркально отраженный в модульных тестах):
#include <stdio.h>
#include <stdbool.h>
#include <ccan/ciniparser/ciniparser.h>
#define CONFIG_FILE "/etc/config.ini"
int main(int argc, char *argv[])
{
dictionary *d;
char *val1;
bool val2;
double val3;
int val4;
d = ciniparser_load(CONFIG_FILE);
if (d == NULL)
return 1;
val1 = ciniparser_getstring(d, "daemon:pidfile", NULL);
val2 = ciniparser_getboolean(d, "daemon:debug", false);
val3 = ciniparser_getdouble(d, "daemon:maxload", 3.5);
val4 = ciniparser_getint(d, "daemon:maxchild", 5);
ciniparser_freedict(d);
return 0;
}
Конечно, вы можете просто удалить несколько файлов, необходимых в вашем дереве, и #include "iniparser.h"
, нет никаких зависимостей от других модулей CCAN, если вы не хотите запустить модульные тесты.
Пример конфигурации может выглядеть следующим образом:
[stooges]
larry=larry_stooge
curly=curly_stooge
moe=moe_stooge
shemp=questionable
[cartoons]
tom_hates=jerry
Получение значения stooges:shemp
даст статически распределенный questionable
, который вы будете использовать как есть (без изменения) или выделять и дублировать (т.е. strdup()
). Это не намного легче, чем это. Оберните доступ к словарю простым мьютексом и его потокобезопасным.
CCAN - это архивная сеть C. Подумайте CPAN
, просто C
. Это проект Rusty Russell , начатый недавно, который наконец набирает обороты.
Отказ от ответственности: я поддерживаю модуль.