PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Werte nachhaltig speichern



keinWort
14-09-2005, 10:08
Hallo,

auf die Gefahr hin das ich nerve, habe ich noch ne Frage.

Mein Watchdog-Programm (CMD) hat drei Parameter, die ich gerne speichern würde, so dass sie, wenn Sie geändert wurden, nach einem Neustart wieder zur Verfügung stehen. Ich dachte da an eine kleine Konfigurationsdatei, komme aber damit nicht klar.

Eine Datei speicher nur char, richtig?

Wie kann ich dann meine Werte (int) in einer Datei sinnvoll Speichern?

Gibt es für sowas keine fertige Lösung? Man muss das Rad ja nicht neu erfinden.


Danke schon mal an alle wissenden.

Christian

anda_skoa
14-09-2005, 10:31
Eine Datei speicher nur char, richtig?

Eine Datei ist ein Datenblock auf einem Langzeitspeicher, bzw aus Sicht von C oder C++ einfach eine Datenquelle/Datensenke.
Da kannst du alles reinschreiben, was du auch im Speicher halten kannst.

Für Konfigurationationswerte ist es natürlich sinnvoller, Text als Basisdatentyp zu verwenden.



Wie kann ich dann meine Werte (int) in einer Datei sinnvoll Speichern?

zB ein Wert pro Zeile, oder Paare mit Schlüssel=Wert (INI Style Config)



Gibt es für sowas keine fertige Lösung? Man muss das Rad ja nicht neu erfinden.

Jede Menge, für praktisch jede Art von Config-Format.
Wenn du nur drei Werte speichern willst, dürfte aber eine Config-Library bischen overkill sein :)

Ciao,
_

7.e.Q
19-09-2005, 13:25
Du kannst sie auch binär speichern, indem du die Daten in einer Struktur speicherst und die Struktur einfach in eine Datei schreibst. Also sowas wie (Achtung! Pseudo-Code, keine Garantie auf 100% Korrektheit):




typedef struct blubblbla
{
int val1,
char val2,
bool val3
};

main()
{
struct blubblbla sBlubb;
sBlubb.val1 = 50;
sBlubb.val2 = 'x';
sBlubb.val3 = true;

int i_WFD = open("/etc/blubb.conf", O_WRONLY);
write(iFD,&sBlubb,sizeof(struct blubblbla));
close(iFD);


int i_RFD = open("/etc/blubb.conf", O_RDONLY);
read(i_RFD,&sBlubb,sizeof(struct blubblbla));
close(iFD);

return 0;
}



Allet klar? :)

panzi
19-09-2005, 21:52
Binärdatein find ich nicht gut. Find's gut wenn man Datein mit einen Texteditor einfach lesen/schreiben kann.

Zu quasi dem Thema gibt's schon nen thread:
http://www.mrunix.de/forums/showthread.php?t=39224

Und da habe ich auch schon meine kleine C-API um configs zu speichern gepostet:
http://www.mrunix.de/forums/showpost.php?p=176671&postcount=4

Damit kann man Datein in dem Format speichern/laden:

# comment...
global_key1="value"
global_key2="value"

[group1]
key1="value"
key2="value"

[group2]
# comment
key1="value"
key2="value"
# comment
key3="value"

# comment


Wie man sowas einliest und schreibt hab ich mit einem beispiel (config/example.c) erklärt.

Die werte sind aber alle string (char*). Di muss't noch selber in z.B. int umwandeln (sscanf(string, "%d", &i); siehe: man sscanf (http://unixhelp.ed.ac.uk/CGI/man-cgi?sscanf)).

Ein anderer hat das hier gelinkt:
http://www.boost.org/doc/html/program_options.html