posix verzeichnisfunktion



  • hi leute,

    ich schreibe mir eine bibliothek mit datei und verzeichnis funktionen und möchte das auf posix basis ohne windows. Die funktion soll alle verzeichnisse und dateien auflisten.

    ich habe hier einen beitrag gefunden
    http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/017_c_dateien_verzeichnisse_003.htm#mjc31cd7e93db31d7407d32cd062032c36

    da wird das auch erklärt mit opendir und readdir. Könnt ihr mir erklären wie das funktioniert? hab es irgendwie hinbekommen aber meine kenntnisse über zeiger und referenzen halten sich in grenzen und bei so gut wie jedem tutorial komme ich da kaum mit...



  • nehmen wir mal dieses beispiel

    DIR *dir;
    struct dirent *dirzeiger;
    /* Verzeichnis öffnen */
    if((dir=opendir(dirname)) != NULL)
    /* komplettes Verzeichnis Eintrag für Eintrag auslesen */
    while((dirzeiger=readdir(dir)) != NULL)
        printf("%s\n",(*dirzeiger).d_name);
    

    wieso hat der zeiger auf die struct (*dirzeiger) keinen zeiger also * mehr?



  • Lern doch erst mal die Sprache, bevor du dich an Bibliotheksfunktionen setzt, von denen du nicht verstehst, wie du sie anwenden musst.



  • und warum ist in diesem beispiel ein zeiger dir*? der pfad ist hier ja in dirname



  • Vergiss am besten dieses komische Buch von JW.

    Schau dir stattdessen mal boost::filesystem an.
    Datein/Verzeichnisse auflisten geht so:
    http://www.boost.org/doc/libs/1_63_0/libs/filesystem/doc/tutorial.html#Directory-iteration



  • ja ich möchte das erstmal aber so handhaben...

    der zeiger dir ist doch bloss eine referenz auf den eigentlichen pfadnamen richtig? theorethisch kann man diesen ja dann weglassen und nur mit dem pfadnamen arbeiten oder?



  • chris01349 schrieb:

    ja ich möchte das erstmal aber so handhaben...

    Du verstehst also nicht, was du tust, aber bleibst dabei, es so machen zu wollen.

    Nagut. Ich halte Kinder auch nur einmal davon ab, Sand zu essen. Danach gehe ich.



  • was ist dein problem? die boost bibliothek vereinfacht für die programmierer alles. Doch ich möchte mir eine eigene schreiben um es selbst zu lernen und nicht abhängig vom betriebsystem zu sein. Deshalb keine Windowsfunktionen und keine bibliotheken... posix funktioniert auf windows, linux und unix und ist somit auf jedes system portierbar...



  • chris01349 schrieb:

    Doch ich möchte mir eine eigene schreiben um es selbst zu lernen und nicht abhängig vom betriebsystem zu sein.

    Dann machst du gerade aber auch wirklich alles falsch, was man falsch machen kann.

    1. Du verstehst die verwendete Sprache nicht.
    2. Du verstehst die verwendete Sprache nicht.
    3. Du schaffst es nicht, dir die Dokumentation der zu verwendenden Funktionen durchzulesen (opendir und readdir).
    4. Du schaust dir nicht bereits existierenden Code an (boost), um zu schauen, wie die das machen.

    Und schließlich:

    chris01349 schrieb:

    ... posix funktioniert auf windows, linux und unix und ist somit auf jedes system portierbar...

    5. Ach ja? Echt? Dafür brauchst du also nicht so Sachen wie Cygwin?

    Was, oh was könnte mein Problem sein?



  • dachschaden schrieb:

    Nagut. Ich halte Kinder auch nur einmal davon ab, Sand zu essen. Danach gehe ich.

    Naja, so ganz stimmt das aber nicht. Am Herzen scheint es Dir schon zu liegen. Immerhin bist Du der neist involvierte Teilnehmer bei solchen Themen.



  • chris01349 schrieb:

    wieso hat der zeiger auf die struct (*dirzeiger) keinen zeiger also * mehr?

    Weil man durchaus auch mal die Adresse braucht.

    Ein Zeiger ist eine Variable, die eine Adresse speichert. (ein int speichert eine Ganzzahl, ein float eine Fließkommazahl)
    Du kannst auf den Inhalt des Zeigers (die Adresse) zugreifen, oder auf das Element, das an dieser Adresse steht (worauf der Zeiger zeigt).

    Bevor dir dieser Unterschied nicht klar ist, brauchst du nicht weiter machen.

    Dazu kommt noch, dass so ein Zeiger einen Speicherplatz hat (er ist ja eine Variable), der auch eine Adresse hat.


Anmelden zum Antworten