UCI verwenden wir ganze Listen mit folgendem Befehl abrufen:UCI C API - Wie mit Listenoptionen arbeiten
config system
option hostname 'OpenWrt'
option timezone 'UTC'
config timeserver 'ntp'
list server '0.openwrt.pool.ntp.org'
list server '1.openwrt.pool.ntp.org'
list server '2.openwrt.pool.ntp.org'
list server '3.openwrt.pool.ntp.org'
option enabled '1'
option enable_server '0'
Das Rückkehr:
$ uci get system.ntp.server
dies die Art von Konfiguration unten lesen würde alle NTP-Server in einer langen Zeichenfolge in Ordnung.
0.openwrt.pool.ntp.org 1.openwrt.pool.ntp.org 2.openwrt.pool.ntp.org 3.openwrt.pool.ntp.org
Ich möchte das gleiche (oder gleichwertig) mit dem CAPI erreichen.
habe ich den folgenden Code zusammen:
#include <uci.h>
#include <string.h>
void main()
{
//char path[] = "system.ntp.enabled";
char path[] = "system.ntp.server";
char buffer[80];
get_config_entry(path, &buffer);
printf("%s\n", buffer);
}
int get_config_entry (char *path, char *buffer)
{
struct uci_context *c;
struct uci_ptr ptr;
c = uci_alloc_context();
if (uci_lookup_ptr (c, &ptr, path, true) != UCI_OK)
{
uci_perror (c, "XXX");
return 1;
}
strcpy(buffer, ptr.o->v.string);
uci_free_context (c);
return 0;
}
Ausführen dies gibt nur Müll in der Ausgabe-String.
Wie soll ich mit der UCI C API Listeninhalte bearbeiten?
Sie müssen sich für 'get_config_entry' einen Prototyp setzen, bevor' main' (oder einfach die ganze Funktion vor 'main' nach oben). Beachten Sie, dass der Compiler hilfreich auf Ihre Fehler hingewiesen hätte, wenn Sie mit aktivierten Warnungen kompiliert hätten (z. B. "gcc -Wall ..."). –
Ich habe das UCI-Tag entfernt, welches sich momentan mit der "Universalschach-Schnittstelle" beschäftigt, nicht über die "Unified Configuration Interface". –
Ich glaube, Sie sollten den Aufruf so machen: get_config_entry (Pfad, Puffer); Hinweis: "Puffer" hat kein Und-Zeichen davor. – TonyB