Definition | #include <dirent.h> Optional #include <sys/types.h> (Ende) DIR *opendir(const char *dirname); DIR *fdopendir(int fd); |
Beschreibung | opendir() öffnet einen Dateiverzeichnisstrom, entsprechend dem durch dirname angegebenen Dateiverzeichnis. Der Dateiverzeichnisstrom wird auf den ersten Eintrag positioniert. Der Datentyp DIR , der in dirent.h definiert ist, repräsentiert einen Dateiverzeichnisstrom, der eine geordnete Folge aller Dateiverzeichnis-Einträge in einem speziellen Dateiverzeichnis ist. Der Datentyp DIR ist unter POSIX durch einen Dateideskiptor implementiert. Daher können Anwendungen höchstens {OPEN_MAX} -Dateien und Dateiverzeichnisse öffnen.
Der Nullzeiger wird zurückgegeben, wenn auf dirname nicht zugegriffen werden kann, wenn dirname kein Dateiverzeichnis ist oder wenn nicht genügend Speicherplatz zur Aufnahme einer DIR -Struktur bzw. eines Puffers für die Dateiverzeichniseinträge mit malloc() zur Verfügung gestellt werden kann. Die Funktion fdopendir() ist äquivalent zur Funktion opendir() mit dem Unterschied, dass das Verzeichnis statt durch einen Pfadnamen durch den Dateideskriptor fd spezifiziert wird. Nach erfolgreicher Rückkehr aus fdopendir() , steht der Dateideskriptor unter der Kontrolle des Systems. Wird versucht den Dateideskriptor zu schließen, oder den Zustand des Verzeichnisses durch andere Funktionen als closedir() , readdir() , rewinddir() oder seekdir() zu ändern, ist das Verhalten undefiniert. Durch closedir() wird auch der Dateideskriptor geschlossen. |
Returnwert | Zeiger auf ein DIR -Objekt |
|
| bei Erfolg. |
| Nullzeiger | bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | opendir() und fdopendir() schlagen fehl, wenn gilt:
|
| EACCES
| Das Durchsuchrecht für eine Komponente von dirname oder das Leserecht für dirname wird nicht erteilt. |
| Erweiterung |
| EFAULT
| dirname weist über den zugewiesenen Adressraum hinaus. |
| ELOOP
| Während der Übersetzung von dirname waren zu viele symbolische Verweise vorhanden. (Ende) |
| EMFILE
| Für den Prozess sind derzeit mehr als {OPEN_MAX} -Dateideskriptoren offen. |
| ENAMETOOLONG
|
|
| Die Länge von dirname überschreitet {PATH_MAX} , oder eine Pfadnamen-Komponente ist länger als {NAME_MAX} . |
| ENFILE
| Im System sind derzeit zuviele Dateideskriptoren offen. |
| ENOENT
| dirname zeigt auf den Namen einer Datei, die nicht existiert, oder auf die leere Zeichenkette. |
| ENOTDIR
| Eine Komponente von dirname ist kein Dateiverzeichnis. |
| Zusätzlich schlägt fdopendir() fehl, wenn gilt: |
| EBADF
| Der Parameter fd enthält keinen gültigen zum Lesen geöffneten Dateideskriptor. |
| ENOTDIR
| Der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden. |
Hinweise | opendir() sollte in Verbindung mit readdir() , closedir() und rewinddir() verwendet werden, um den Inhalt eines Dateiverzeichnisses zu untersuchen (siehe auch readdir() ). Diese Methode wird aus Portabilitätsgründen empfohlen.
opendir() wird nur für POSIX-Dateien ausgeführt.
|
Siehe auch | closedir() , readdir() , rewinddir() , dirent.h , sys/types.h , limits.h .
|