• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

title aus menu.lst(grub) in C?

Appleonkel

Hacker
Ich moechte die title aus der /boot/grub/menu.lst lesen und in Variablen speichern.

So habe ich mir das vorgestellt.
Code:
---schnipp--
fz = fopen(dateiname, "r");
     if (fz == NULL)
          printf("!!!Datei '%s' kann nicht zum lesen geoeffnet werden\n", dateiname);
     else {
          printf(".... Datei '%s' wurde zum lesen geoeffnet\n", dateiname);
               while ( (zeich = fgetc(fz)) != EOF) { /*Zeichen aus Datei lesen */
                      if (zeich == 'title') 
                          zeich = title;
               }
     }
fclose(fz);
printf("..... und wieder geschlossen\n");
---schnipp---
So oder so aehnlich stell ich mir das vor, mein Problem ist das ich nur den Wert hinter title haben moechte(also den Titel :D) und jeder title in einer neuen Varibale steht, ohne vorher zu wissen wie viele title es in der menu.lst gibt.

mfg Appleonkel
 

TeXpert

Guru
über die Datei itereieren (while ! eof)

Zeilenweise lesen (fgets)

wenn beginnt mit title -> rest abspeichern + speichern sonst weiterlesen
 
OP
Appleonkel

Appleonkel

Hacker
Habe es jetzt so:
Code:
while (feof(fz) == 0) { 
     fgets(zeich1, 80, fz);
     if (zeich1[0] != 't')
          continue;
}

Leider fängt "timeout" auch mit 't' an. Wie bekomme ich das noch raus?
Und wie ich die Titel in verschiedene Variablen damit? Immerhin steht 'title' ja so noch davor.

thx Appleonkel
 

TeXpert

Guru
indem Du die richtigen Vergleichsfunktionen nutzt. (strncmp)

Code:
#include <stdio.h>
#include <string.h>

int main() {

 FILE *fp;
 fp = fopen("/boot/grub/menu.lst","r");
 char line[255];
 int count=255;	
 int linecount = 0;
 if (fp) {		
    printf("Datei offen\n");
    while (fgets(line, count, fp) != 0) {
	linecount++;
    	if (strncmp("title", line, 5) == 0) {
	    printf("Line: %d - %s", linecount, line);
	}
    }
    fclose(fp);
 }
 else {
    printf("fehler beim Öffnen\n");
 }
}

weiterhin wäre hier nochmal ein Blick in die grub-manpage angebracht, muss es title sein, oder ist auch Title möglich?... -> substr und dann toupper, tolower
 
Oben