PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c Datei einlesen und auswerten



moe61
10-01-2007, 11:22
Hi

Ich suche nach einer Möglichkeit Variablen aus einer Datei alla /etc/default/* auszulesen. Dort liegen Datein mit Einstellungen von verschiedenen Programmen. Die entsprechende Datei wird im Pfad mit angegeben und das Programm sucht dann darin nach Einstellungen zum beispiel für den Seriellen port oder so.

wie kann ich C beibringen erstens eine Datei Zeile für Zeile auszulesen und dann Optionen wie "MODEMDEVICE=/dev/ttyS0" auszuwerten und auch im Program die Variable Modem auf /dev/ttyS0 zu setzen???

Öffnen und schreiben von Dateien is kein Problem nur krieg ich halt das Auslesen und die Auswertung nich hin.

thanks for help

moe

Vincent Vega
10-01-2007, 12:07
Du musst die Datei öffnen, einlesen und den Inhalt parsen.

Einfacher könnte aber sein, Deine Anwendung über Umgebungsvariablen zu steuern, so dass Du in der Shell etwas in der Art von "export MODEMDEVICE=..." sagst und dann Dein Programm startest.

Um die Umgebungsvariable in Deinem Programm auszulesen kannst Du getenv(3) verwenden.

moe61
10-01-2007, 12:36
übber Umgebungsvariablen will ich's nicht machen, da das Programm auf nem Webserver laufen soll und die Daten, die über die Serielle Schnittstelle komme in eine Datenbank schreiben soll. Da will ich mit umgebungsvariablen die auch noch von anderen Programmen ausgelesen werden können nichts machen.

Genau um diese Parsen geht es
Wie mache ich das????

thanks

moe

Vincent Vega
11-01-2007, 11:50
Umgebungsvariablen sind nur für die Prozesse sichtbar, die von der selben Shell gestartet wurden, nicht für alle.

Um eine Konfigurationsdatei zu parsen verwendet man gewöhnlich lex/yacc oder flex/bison. lex und flex sind Scanner-Generatoren, yacc und bison erstellen den Parser. Eventuell musst Du Dir ein bisschen Theorie dazu antun.

gorba
11-01-2007, 13:36
mein tipp: python währe für dein Problem geradezu ideal...
falls du python kannst, machs damit!

musketaquid
13-01-2007, 14:32
Du kannst die Zeile z.B. mit strtok() zerpflücken.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
char cfgstr[] = "MODEMDEVICE=/dev/ttyS0";
char *p;

p = strtok( cfgstr, "=" );
printf( "Erster Teil der Zeichenkette: %s\n", p );

p = strtok( NULL, "\n" );
printf( "Zweiter Teil der Zeichenkette: %s\n", p );

exit(0);
}

Folgendes kommt dabei raus:

Erster Teil der Zeichenkette: MODEMDEVICE
Zweiter Teil der Zeichenkette: /dev/ttyS0

Dann musst du halt nur noch auf eventuelle Fehler überprüfen. ;)

jeebee
13-01-2007, 15:22
BUGS
Avoid using these functions. If you do use them, note that:

These functions modify their first argument.

These functions cannot be used on constant strings.

The identity of the delimiting character is lost.
aus der manpage von strtok.