[C/C++] Datenstruktur auslesen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von cable, 30. Oktober 2007 .

Schlagworte:
  1. 30. Oktober 2007
    Datenstruktur auslesen

    Hi!

    Bin immer noch beim Praktikum und hab noch die Aufgabe einen vorhandenen Taskmanager für Linux umzuschreiben. Hier is der Quellcode:
    ttm -


    Tint Task Manager - Google Project Hosting
    . Wenn man das kompiliert und startet bekommt man so eine Taskleiste wie bei Windows die normale Leiste unten. Also so kann man sich das vorstellen.

    Meine Aufgabe war/is: Noch so eine Leiste an den oberen Bildschirmrand zu zaubern. Das ist mir auch gelungen. Jetzt sollen in jene Liste verschiedene Buttons mit den Namen der entsprechenden Ordner des .config-Verzeichnisses. Wenn auf einen der Buttons draufklickt, soll Unter der Leiste eine Art Box erscheinen, die alle Dateien aufzeigt, die die Endung .desktop haben. Mein Problem ist, dass ich nicht weiß wie ich als erstes mal die Datenstruktur auslesen kann. Hab mich da mal umgeschaut und Funktionen wie "readdir()", "opendir()" und "scandir()" gefunden, aber kann nicht viel damit anfangen. Des weiteren weiß ich nicht genau, wo ich die funktion reinschreiben soll, bzw wo ich ansetzen kann. Wäre großartig, wenn mir jemand helfen könnte, auch wenn ich das bezweifle!

    greez
     
  2. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Du bist mit diesen Funktionen definitiv auf dem richtigen weg. Ich habe dir mal den Link zu einem Codebeispiel kopiert wo ganz gut zu sehen ist wie man den Inhalt eines Verzeichnisses ausliest.

    http://www.pronix.de/pronix-88.html
     
  3. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Vielen Dank, das hat mir schon mal geholfen. Nun habe ich noch ein Problem und zwar bei der Angabe des Dateinamens. Weiß nicht wie man den bei Linux den Ordnerpfad angibt. habe "~/.config/" ausprobiert, aber hat nicht fuktioniert. Also ich muss die Verzeichnisse und Dateien im Ordner .config auflisten, aber irgendwie will der net so ganz!

    Bernie, hast BW bekommen!

    greez
     
  4. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Das könnte dir helfen

    {bild-down: http://gd.tuwien.ac.at/books/tutorials/SelfLinux-0.11.2/bilder/baum.png}


    btw. ~ = /home/user des eingeloggten Users | falls root = /root
     
  5. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Hey thx Mahjong. Hab es jetzt so gelöst:

    Code:
    char *path;
    path = getenv("HOME");
    strcat(path, "/.config/");
    
    Also er liest den Hauptpfad aus, mit User und hängt durch "strcat()" /.config/ an den string ran und dann listet er mir das auch richtig auf.

    Jetzt tritt das nächste Problem auf. Ich muss unterscheiden zwischen Ordner und File, aber ich weiß nicht, wie ich das anstelle außer durch eine Methode, die auf der Seite steht, die der Bernie gepostet hat. Das geht aber auch nur unter bestimmten Umständen. Ich muss aber ganz klar unterscheiden können ob es ein File is oder nur ein Ordner. Ich hab erst überlegt ob man das mit der Endung sehen kann aber es gibt ja auch Dateien ohne Endungen. Besonders unter Linux -.-

    greez

    Mahjong hat auch ne BW bekommen
     
  6. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Hi !

    Schau dir mal 'stat ()' an.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    int main (int argc, char **argv)
    {
     struct stat buf;
    
     if (argc < 2)
     return EXIT_FAILURE;
    
     if (stat (argv[1], &buf) == -1)
     {
     perror ("stat");
     return EXIT_FAILURE;
     }
    
     if (S_ISDIR (buf.st_mode))
     {
     printf ("%s is a directory!\n",
     argv[1]);
     } else {
     printf ("%s is no directory!\n",
     argv[1]);
     }
    
     return EXIT_SUCCESS;
    }
    
    /* by Kolazomai */
    MAN-File angucken

    Mfg,

    Kolazomai
     
  7. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Kola, du hast mal ne BW bekommen, aber ich verstehe nicht so genau, was mit stat() hier bringt obwohl ich mir die manual angeschaut habe!

    greez
     
  8. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Hi!

    Damit kannst du schaun, ob die Datei ein 'Ordner' ist, welche Rechte auf der Datei liegen, wie gross sie ist, ob es eine regulaere Datei ist, usw usf...

    Mfg,

    Kolazomai
     
  9. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Ok, dann hab ich es doch richtig verstanden. Aber ich komme nicht richig damit weiter!

    hier mal die fkt, die ich geschrieben habe:
    Code:
    void config_read_directory()
    {
     DIR *dir;
     char *path;
     path = getenv("HOME");
     printf("Pfad: %s\n", path);
     strcat(path, "/.config/");
     struct dirent *dirzeiger;
     /* Verzeichnis öffnen */
     dir=opendir(path);
     if(dir != NULL){
     /* komplettes Verzeichnis Eintrag für Eintrag auslesen */
     while((dirzeiger=readdir(dir)) != NULL){
     printf("%s\n",(*dirzeiger).d_name);
     }
     }
     else{
     printf("%s\n", "Ordner nicht gefunden!");
     }
    }
    Ich will, dass nur die Sachen ausgegeben werden, die ein Verzeichnis sind. Also muss man das immer in der Schleife prüfen, bevor man den Namen ausgibt, oder?

    greez
     
  10. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Hi!

    Durchlauf doch einfach in einer Schleife alle Objekte, die in einem Verzeichnis liegen, und ueberpruef dann mit 'stat ()' ob es sich um einen Ordner und/oder um eine regulaere Datei handelt ( Was auch immer du halt machen willst ... ).

    Uebrigens ist 'strcat ()' ein Fehler hier ...
    1. Benutzt man immer 'strncat ()'.
    2. Ist '*path' ein Pointer zu einem Buffer, der genau so gross wie die PATH-EnvVariable ist. Wenn du jetzt also was dranhaengst, schreibst du IRGENDWO in ( / ueber ) den Speicher. Das heisst, du muesstest eigentlich eine 2te Variable erstellen, fuer die du Speicher alloziierst und in die du dann die beiden Strings zusammenfuegst.

    Mfg,

    Kolazomai
     
  11. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Sry.... Ich glaub ich weiß was du meinst, aber ich hab absolut keine Ahnung, wie man mit Zeigern umgeht bzw wofür man die bracuht. Also eigentlich weiß ich es schon, aber verstehe die Verwendung nicht. Wenn ich ein * sehe, schalte ich immer ab....

    außerdem weiß ich nicht, was stat() für Argumente braucht und ob der den ganzen Filepfad braucht oder whatever. Noob bin ich dadrin!

    greez
     
  12. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Hi!

    Dann wuerde ich erstmal damit anfangen zu lernen, was Pointer, Argumente, Funktionen, etc. sind.
    Der Nutzen ein Programm 'geschrieben' zu haben, das man nicht versteht, d.h. also auch nicht verbessern und debuggen kann, ist sehr gering.

    C von A bis Z.

    Mfg,

    Kolazomai
     
  13. 30. Oktober 2007
    AW: Datenstruktur auslesen

    Es sind hauptsächlich die Zeiger.... Funktionen und Argumente und OOP is eigentlich nicht so das Problem. So ich hab Schluss für heute. Kola, vielen Dank schonmal für deine Hilfe. Morgen werde ich den Thread hier fortführen und ich hoffe, dass ich ein wenig weiter kommen kann! Und die Funktion versteh ich schon. Außer das mit den Scheiß Zeigern. Irgendwie hasse ich die...

    greez
     
  14. 2. November 2007
    AW: Datenstruktur auslesen

    Sooo. Ich habs geschafft mit Datenstruktur auslesen und ausgeben + Subfolder. Nun muss ich mir sagen lassen, welche Dateien mit .desktop aufhören. Die dateien lass ich mir dann markieren, weil cih dir für das spätere Programm brauche! Ich hab mir gedacht, dass ich die Dateinamen in einem string speichere und dann mit einer Fkt schaue, ob sich .desktop in dem string vorhanden ist. NUr ich weiß nicht, welche Fkt dafür geeignet ist.

    greez
     
  15. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.