Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

readdir, readdir64 - aus Dateiverzeichnis lesen

&pagelevel(4)&pagelevel

Definition

#include <dirent.h>
#include <sys/types.h>

struct dirent *readdir (DIR *dirp);
struct dirent64 *readdir64 (DIR *dirp);

Beschreibung

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.

Returnwert

Zeiger auf ein Objekt vom Typ struct dirent



bei erfolgreicher Beendigung.

 

Nullzeiger

wenn das Ende des Dateiverzeichnisses erreicht wird. errno wird nicht verändert.

 

Nullzeiger

wenn ein Fehler auftritt. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

readdir() und readdir64() schlagen fehl, wenn gilt: 

 

EBADF

Das Argument dirp zeigt nicht auf einen offenen Dateiverzeichnisstrom.

 

ENOENT

Die aktuelle Position des Verzeichnisstroms ist ungültig.

 

EOVERFLOW

Ein Wert in der zurückgegebenen Struktur kann nicht korrekt dargestellt werden.

Hinweis

readdir() sollte in Verbindung mit opendir(), closedir() und rewinddir() verwendet werden, um den Inhalt des Dateiverzeichnisses zu untersuchen. Da readdir() den Nullzeiger sowohl am Ende des Dateiverzeichnisses als auch bei Fehler liefert, sollte eine Anwendung, die Fehlersituationen überprüfen will, errno gleich 0 setzen. Danach sollte die Anwendung readdir() aufrufen, den Wert von errno prüfen und, wenn dieser ungleich 0 ist, das Auftreten eines Fehlers annehmen.

pclose() wird nur für POSIX-Dateien ausgeführt. 

Siehe auch

closedir(), opendir(), readdir_r(), rewinddir(), dirent.h, sys/stat.h, sys/types.h.