Der Datentyp DIR , der in der Include-Datei dirent.h definiert ist, repräsentiert einen Dateiverzeichnisstrom, der eine geordnete Folge aller Einträge eines speziellen Dateiverzeichnisses ist. Dateiverzeichniseinträge repräsentieren Dateien; Dateien können asynchron zur Ausführung von readdir() aus einem Dateiverzeichnis entfernt bzw. zu einem Dateiverzeichnis hinzugefügt werden. readdir() liefert einen Zeiger auf eine Struktur, die den nächsten, nichtleeren Dateiverzeichniseintrag in dem Dateiverzeichnisstrom enthält, auf den dirp zeigt, und positioniert den Dateiverzeichnisstrom auf den nächsten Eintrag. Sobald sie das Ende des Dateiverzeichnisstroms erreicht, liefert sie den Nullzeiger. Die Struktur dirent beschreibt einen Dateiverzeichniseintrag (siehe dirent.h ).
readdir() liefert keine Dateiverzeichniseinträge, die leere Namen enthalten. Wenn Einträge für . (aktuelles Dateiverzeichnis) und .. (übergeordnetes Dateiverzeichnis) existieren, wird genau ein Eintrag für . und einer für .. zurückgeliefert.
Der von readdir() zurückgelieferte Zeiger zeigt auf Daten, die von einem weiteren Aufruf von readdir() für denselben Dateiverzeichnisstrom überschrieben werden können. Diese Daten werden von einem weiteren Aufruf von readdir() für einen anderen Dateiverzeichnisstrom nicht überschrieben. Wenn nach dem letzten Aufruf von opendir() oder rewinddir() eine Datei aus dem Dateiverzeichnis entfernt oder zu diesem hinzugefügt wurde, ist es unbestimmt, ob ein nachfolgender Aufruf von readdir() einen Eintrag für diese Datei zurückliefert. readdir() kann mehrere Dateiverzeichniseinträge bei einer einzelnen Leseoperation zwischenspeichern; readdir() aktualisiert die Strukturkomponente st_atime des Dateiverzeichnisses jedes Mal, wenn das Dateiverzeichnis wirklich gelesen wird (siehe auch sys/stat.h ).
Nach einem fork -Aufruf können entweder der Vater- oder der Sohnprozess (aber nicht beide) die Ausführung fortsetzen, indem readdir() , rewinddir() oder seekdir() verwendet werden. Wenn sowohl Vater- als auch Sohnprozess diese Funktionen aufrufen, ist das Ergebnis nicht definiert. Es besteht kein funktionaler Unterschied zwischen readdir() und readdir64() , außer dass readdir64() eine dirent64 -Struktur verwendet. Die Struktur dirent64 entspricht der von dirent , mit Ausnahme folgender Komponente: ino64_t d_ino
readdir() und readdir64() sind nicht threadsicher. Verwenden Sie anstelle von readdir() bei Bedarf die reentrante Funktion readdir_r() . Für die Funktion readdir64() existiert derzeit noch kein reentrantes Pendant.
|