C:
Å jobbe med TOML
Hvordan:
For å arbeide med TOML i C, trenger du først et bibliotek som er i stand til å parse TOML-filer, ettersom C standardbiblioteket ikke inkluderer denne funksjonaliteten. Et populært valg er tomlc99
, en lettvekts TOML-parser for C99. Her er en rask veiledning for å lese en enkel TOML-konfigurasjonsfil:
Først, sørg for at du har installert tomlc99
og riktig lenket det i prosjektet ditt.
Eksempel på TOML-fil (config.toml
):
[database]
server = "192.168.1.1"
porter = [ 8001, 8001, 8002 ]
maks_tilkobling = 5000
aktivert = true
C-kode for å parse denne filen:
#include <stdio.h>
#include <stdlib.h>
#include "toml.h"
int main() {
FILE *konfigurasjonsFil;
konfigurasjonsFil = fopen("config.toml", "r");
if (!konfigurasjonsFil) {
perror("Kan ikke åpne fil");
return EXIT_FAILURE;
}
toml_table_t *konfig = toml_parse_file(konfigurasjonsFil, NULL, 0);
if (!konfig) {
fprintf(stderr, "Feil ved parsing av fil\n");
fclose(konfigurasjonsFil);
return EXIT_FAILURE;
}
toml_table_t *database = toml_table_in(konfig, "database");
if (database) {
const char *server = toml_raw_in(database, "server");
printf("Databaseserver: %s\n", server);
toml_array_t *porter = toml_array_in(database, "porter");
for (int i = 0; i < toml_array_nelem(porter); i++) {
int64_t port;
toml_int_at(porter, i, &port);
printf("Port %d: %ld\n", i, port);
}
}
toml_free(konfig);
fclose(konfigurasjonsFil);
return EXIT_SUCCESS;
}
Output:
Databaseserver: "192.168.1.1"
Port 0: 8001
Port 1: 8001
Port 2: 8002
Dypdykk
TOML ble skapt av Tom Preston-Werner, medgrunnlegger av GitHub, som en respons på de begrensningene han oppfattet i andre konfigurasjonsfilformater. Målet er å være rett frem og entydig, både for mennesker og datamaskiner, å lese og skrive uten å trenge komplekse parseringsregler. I C-økosystemet, er ikke TOML en førsteklasses borger som det kanskje ville vært i høyere nivå språk som for eksempel Rust med sin serde_toml
eller Python med toml
, som har biblioteker med innebygd støtte. Snarere må C-utviklere stole på eksterne biblioteker som tomlc99
, men dette er typisk gitt Cs vekt på minimalisme og ytelse.
Selv om TOML er rost for sin klarhet, når man velger et konfigurasjonsfilformat, er det viktig å vurdere prosjektets behov. I scenarioer som krever mer komplekse strukturer eller interaktivitet med web-APIer, kan JSON eller til og med YAML tilby en bedre passform på tross av deres økte kompleksitet. TOML skinner i konfigurasjoner hvor lesbarhet og enkelhet er av største viktighet, ikke nødvendigvis der de mest avanserte datastrukturene trengs.