Zum Abschluss wollen wir uns noch ein kleines Beispiel anschauen.
Nämlich wollen wir nun ein Programm schreiben, mit dem wir alle symbolischen Verknüpfungen
im aktuellen Verzeichnis auflisten können.
Dazu habe ich nun hier bereits eine Datei vorbereitet, in der die notwendigen Includes
und Stimäen vorhanden sind.
Diese wollen wir nun erweitern.
Damit wir nun innerhalb eines Verzeichnisses alle Dateien auflisten können,
um später zu prüfen, ob es sich bei einer Datei um einen symbolischen Link handelt oder nicht,
müssen wir die OpenDIR-Funktion aufrufen.
Also rufen wir uns nochmal in Erinnerung, wie diese aufgebaut ist.
Die OpenDIR-Funktion erwartet als einziges Argument einen Pfad.
Der Rückgabewert ist ein Zeiger auf etwas vom Typ DIR.
Mit dem Punkt als Pfad bekommen wir das aktuelle Verzeichnis.
Nun müssen wir überprüfen, ob ein Fehler aufgetreten ist.
Im Fehlerfall gibt die Funktion null zurück.
Außerdem können wir auch gleich die Ressourcen wieder freigeben.
Im Fehlerfall gibt die ClosedDIR-Funktion minus eins zurück.
Und sie setzt zusätzlich die R an.
Nun haben wir das Verzeichnis geöffnet und geschlossen.
Was noch fehlt ist, dass wir alle Einträge im Verzeichnis auslesen.
Dafür gibt es die ReadDIR-Funktion.
Die ReadDIR-Funktion erwartet als Argument den eben erhaltenen DIR-Zeiger.
Und hat als Rückgabewert ein Zeiger auf etwas vom Typ StructDIRRend.
Der Aufruf an die ReadDIR-Funktion sieht nun so aus.
Wir rufen ReadDIR auf und übergeben den von OpenDIR erhaltenen Zeiger.
Und müssen nun prüfen, ob ein Fehler aufgetreten ist.
Und dies machen wir in einer Schleife.
Da wir potenziell viele Einträge im Verzeichnis haben.
Nun müssen wir prüfen, ob ein Fehler aufgetreten ist.
Dies können wir teilweise anhand des Rückgabewerts prüfen.
Der Rückgabewert ist immer dann null, wenn entweder keine weiteren Einträge im Verzeichnis
vorhanden sind oder ein Fehler aufgetreten ist.
Nun brechen wir die Schleife ab, sobald es entweder keinen weiteren Eintrag mehr gibt
oder ein Fehler aufgetreten ist.
Damit wir nun überprüfen können, ob ein Fehler aufgetreten ist, müssen wir die R0
zu Rate ziehen.
Diese wird von der ReadDIR-Funktion auf ein Wert ungleich Null gesetzt, wenn ein Fehler
aufgetreten ist.
Da die R0 aber im Erfolgsfeld unverändert bleibt, müssen wir sie vor dem Aufruf an
ReadDIR noch auf Null setzen.
Nun können wir auf die einzelnen Strukturmitglieder das StrukturDIR-Rend zugreifen.
Für den Anfang werde ich nun erst einmal alle Dateien ausgeben.
Auf den Namen können wir über das Strukturmitglied d-Names zugreifen.
Wenn ich nun das Programm ausführe, müsste ich eine Liste aller Unterverzeichnisse und
Dateien bekommen.
Und dies scheint zu stimmen.
Ich sehe, dass ich in der Ausgabe Punkt, Punkt und Punkt als Verzeichnisse bekomme, sowie
eine versteckte Datei Beispiel.c.swp, die von meinem Texteditor angelegt wurde, und andere
Dateien.
Was auffällt ist, dass es hier keine Ordnung in der Ausgabe gibt.
Zugänglich über
Offener Zugang
Dauer
00:12:01 Min
Aufnahmedatum
2020-07-21
Hochgeladen am
2020-07-21 13:06:22
Sprache
de-DE