C:
Работа с TOML
Как это сделать:
Чтобы работать с TOML в C, сначала вам нужна библиотека, способная анализировать файлы TOML, поскольку стандартная библиотека C не включает эту функциональность. Популярным выбором является tomlc99
, легковесный парсер TOML для C99. Вот краткое руководство по чтению простого TOML файла конфигурации:
Во-первых, убедитесь, что у вас установлен и правильно подключен в вашем проекте tomlc99
.
Пример TOML файла (config.toml
):
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
Код на C для анализа этого файла:
#include <stdio.h>
#include <stdlib.h>
#include "toml.h"
int main() {
FILE *configFile;
configFile = fopen("config.toml", "r");
if (!configFile) {
perror("Не удается открыть файл");
return EXIT_FAILURE;
}
toml_table_t *config = toml_parse_file(configFile, NULL, 0);
if (!config) {
fprintf(stderr, "Ошибка анализа файла\n");
fclose(configFile);
return EXIT_FAILURE;
}
toml_table_t *database = toml_table_in(config, "database");
if (database) {
const char *server = toml_raw_in(database, "server");
printf("Сервер базы данных: %s\n", server);
toml_array_t *ports = toml_array_in(database, "ports");
for (int i = 0; i < toml_array_nelem(ports); i++) {
int64_t port;
toml_int_at(ports, i, &port);
printf("Порт %d: %ld\n", i, port);
}
}
toml_free(config);
fclose(configFile);
return EXIT_SUCCESS;
}
Вывод:
Сервер базы данных: "192.168.1.1"
Порт 0: 8001
Порт 1: 8001
Порт 2: 8002
Глубокое погружение
TOML был создан Томом Престон-Вернером, сооснователем GitHub, в ответ на ограничения, которые он видел в других форматах файлов конфигурации. Его цель — быть простым и недвусмысленным как для людей, так и для компьютеров, с возможностью чтения и записи без необходимости сложных правил парсинга. В экосистеме C TOML не является таким удобным инструментом, как это может быть в языках более высокого уровня, таких как Rust с его serde_toml
или Python с toml
, которые имеют библиотеки с нативной поддержкой. Вместо этого разработчикам на C нужно полагаться на внешние библиотеки вроде tomlc99
, но это типично с учетом акцента C на минимализм и производительность.
Хотя TOML хвалят за его ясность, при выборе формата файла конфигурации важно учитывать потребности проекта. В сценариях, требующих более сложных структур или взаимодействия с веб-API, JSON или даже YAML могут лучше подойти, несмотря на их повышенную сложность. TOML выделяется в конфигурациях, где важна читаемость и простота, а не обязательно наличие самых продвинутых структур данных.