strings auslesen
-
moin
ich möchte aus einer zeichenkette (/proc/net/dev) bestimmte zeichen einlesen.
und zwar sollen aus den zeilen mit den eth devices die bytes zahlen ausgelesen werden.
leider sind meine fähigkeiten in c so beschrängt das ich am verzweifeln bin.cu melkor
-
du solltest dein Problem genauer beschreiben und vielleicht nen bissel Code zeigen.
-
ok, dann will ich das mal versuchen
ich will aus einer virtuellen datei was auslesen.
und zwar die übertragene byte anzahl von den einzelnen netzkarten.
das was ich erhalte sieht dann in etwa so aus.
eth0:25384950 37549 0 0 0 0 0 0 3952101 23597 0 0 0 0 0 0
nun will ich die zahlen 25384950 und 3952101 auslesen (anmerkung, zwischen den einzelnen zahlen sind tabs gesetzt).
mit code kann ich nicht aufwarten (ausser mit perl code) weil ich das auslesen einfach nicht hinbekomme.
das einlesen der datei und das suchen nach dem devices mach ich mit.f=fopen("/proc/net/dev","r"); if(f == NULL) { printf("Fehler bei fopen()..."); exit(0); } while( fgets(puffer, BUF, f) != NULL ) { if(strstr(puffer,searchstring) != 0) { dev_counter++; printf("Zeile %d : %s",counter,puffer); } counter++; }
cu melkor
-
Tag,
Dann übersetz dein Perlcode nach C.
#--------- snip --------- #der wichtige teil des Perlcodes sieht doch sicherlich so aus $inp=<INPFILE>; my @vals=split(/ \t+/,$inp); #dann würdest du deine Werte bearbeiten #------- snap ------------
Naja und so kannst du es doch in C auch machen.
Du liest die Zeile ein.
Suchst nach den Tabs ('\t'), merkst dir die Position und copierst den string bis zur Position in deinen Puffer.
Dann wandelst du den Puffer mittels atol() oder atoi() in eine Zahl und hast deine Bytes.Du könntest auch strtok() nehmen obwohl ich das nicht so toll finde.
-
sscanf eignet sich doch dazu gut.
-
Tag,
Ohja stimmt, hab ich garnicht mehr dran gedacht.
Ist ja quasi gepackt die Zeile.
Du gibst dann einfach beim Aufruf von sscanf die Tabs mit an.//------ snip --------------- int zahl1,zahl2; sscanf(buf,"%d\t%d",&zahl1,&zahl2); //------- snap ---------------