alle Einträge eines Verzeichnisses ausgeben



  • ich soll eine funktion bauen, die den namen des verzeichnisses als argument bekommt und dann alle einträge dieses verzeichnisses ausgibt
    rückgabewert soll anzahl der einträge sein

    denk ich mal so:

    int ausgabe(char *verzeichnisname)
    {
    ....

    return zaehler;
    }

    aber wie gucke ich denn was im verzeichnis drin ist?



  • Schau' dir mal opendir(), readdir() und closedir() an.





  • Ich würde noch prüfen ob es sich um ein Verzeichnis oder eine Datei handelt !



  • Ist der gegebene Pfad kein Verzeichnis, setzt opendir() errno auf ENOTDIR. Eine vorherige Prüfung ist also nicht unbedingt nötig.



  • scimansix schrieb:

    Ist der gegebene Pfad kein Verzeichnis, setzt opendir() errno auf ENOTDIR. Eine vorherige Prüfung ist also nicht unbedingt nötig.

    Wenn man sich auf eine vorherige Prüfung verlässt und dann den Rückgabewert von opendir() nicht mehr prüft, schadet so eine vorherige Prüfung sogar. Klassische race condition:

    Ausgangssitutation: /foo ist ein Verzeichnis.

    1. Programm X prüft, ob /foo ein Verzeichnis ist: ja, es ist eins.
    2. Irgendwer löscht /foo und legt stattdessen eine Datei /foo an.
    3. Programm X glaubt wegen der vorherigen Prüfung immer noch, /foo sei ein Verzeichnis und prüft nicht den Rückgabewert von opendir(). Möglicherweise passiert gar nichts, möglicherweise stürzt das Programm ab, möglicherweise öffnen sich Sicherheitslücken.

Anmelden zum Antworten