2 - Schnittstelle [ID:19969]
50 von 107 angezeigt

Nachdem wir nun den groben Aufbau eines Dateisystems kennengelernt haben, wollen wir uns nun anschauen,

welche Schnittstellen uns zur Verfügung stehen, um auf das Dateisystem zuzugreifen.

Auf der einen Seite haben wir den STAT bzw. den LSTAT Systemaufruf.

Mit diesem Aufruf können wir uns die Dateiatribute aus dem Einwalt geben lassen.

Der Unterschied zwischen den beiden Aufrufen STAT und LSTAT ist, dass wenn man STAT auf

einen symbolischen Link aufruft, der Aufruf STAT die Information über das Ziel des Links

sucht, während der Aufruf LSTAT Informationen über den symbolischen Link selbst geben würde.

Die Prototypen der beiden Funktionen sind ansonsten identisch.

Das erste Argument ist der Pfad zu der jeweiligen Datei bzw. dem Verzeichnis.

Das zweite Argument ist ein Speicherbereich.

Die Information wird dabei in etwas vom Typ Strukturstatt gespeichert.

Innerhalb eines Strukturstatt stehen viele Informationen.

Für SP brauchen wir an der Stelle aber nur zwei der Strukturmitglieder.

Einmal das Mitglied STSize, was die Größe der Datei beschreibt, und das Strukturmitglied

STMode, mit dem die Zugriffsrechte ausgelesen werden können.

Da innerhalb des STMode-Felds mehrere Rechte in Form von Bits encodiert sind, kann man

darauf mit einigen Makros zugreifen.

Zum Beispiel kann man das Makro S is REC aufrufen, um zu prüfen, ob in dem STMode-Feld der Indikator

für eine reguläre Datei gesetzt ist.

Analog dazu kann man die Makros S is DIR und S is LINK verwenden, um zu prüfen, ob der

STMode ein Verzeichnis bzw. eine symbolische Verknüpfung bezeichnet.

Damit wissen wir nun, wie wir Informationen zu einer Datei finden, über deren Existenz

und Namen wir bereits Informationen haben.

Wenn wir nun aber Dateien in einem Dateisystem suchen wollen, von denen wir entweder nicht

den genauen Pfad wissen oder uns generell einen Überblick über alle Dateien verschaffen

wollen, dann reicht dies noch nicht.

Stattdessen brauchen wir nun ein Hilfsmittel, um herauszufinden, in was für Dateien sich

in einem Verzeichnis befinden.

Dafür gibt es den Aufruf OpenDIR in Kombination mit ReadDIR und CloseDIR.

Mit OpenDIR kann man ein Verzeichnis öffnen und erhält als Ergebnis einen Interator, mit

dem man über alle Einträge des Verzeichnisses iterieren kann.

Das Argument der OpenDIR-Funktion ist an der Stelle ein Verzeichnispfad.

Der Rückgabewert ist eben ein Zeiger auf den Interator.

Dieser muss anschließend wieder mit dem Aufruf CloseDIR freigegeben werden.

Auf diesem Interator können wir nun mit der Funktion ReadDIR arbeiten und uns damit die

einzelnen Einträge geben lassen.

Sobald wir ReadDIR aufrufen, bekommen wir ein Zeiger auf den jeweiligen Eintrag und

der Interator wird um einen Eintrag weiterversetzt.

Abhängig vom Rückgabewert der ReadDIR-Funktion wissen wir, dass entweder ein Fehler aufgedreht

ist oder dass keine weiteren Einträge mehr vorliegen.

In beiden Fällen ist der Rückgabewert Null.

Um nun zu prüfen, welcher der beiden Fälle vorliegt, muss man die Erno mit beachten.

Nämlich verändert der ReadDIR-Aufruf nur dann die Erno, wenn tatsächlich ein Fehler

aufgetreten ist.

Also müssen wir vor Aufruf der ReadDIR-Funktion die Erno auf Null setzen, um anschließend,

falls der Rückgabewert der ReadDIR-Funktion Null ist, zu prüfen, ob die Erno noch immer

Null ist.

Abhängig davon wissen wir, ob ein Fehler aufgetreten ist oder einfach keine weiteren

Dateien mehr im Verzeichnis sind.

Der Grund, dass wir die Erno auf Null setzen, ist, dass per Spezifikation keine Biblioteks plugging

Teil einer Videoserie :
Teil eines Kapitels:
Dateisysteme

Zugänglich über

Offener Zugang

Dauer

00:07:45 Min

Aufnahmedatum

2020-07-21

Hochgeladen am

2020-07-21 12:46:20

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen