.\" -*- coding: UTF-8 -*- .\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk) .\" and Copyright (C) 2008, 2016 Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" Modified Sat Jul 24 16:09:49 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified 11 June 1995 by Andries Brouwer (aeb@cwi.nl) .\" Modified 22 July 1996 by Andries Brouwer (aeb@cwi.nl) .\" 2007-07-30 Ulrich Drepper , mtk: .\" Rework discussion of nonstandard structure fields. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH READDIR 3 "15. September 2017" "" Linux\-Programmierhandbuch .SH BEZEICHNUNG readdir \- liest ein Verzeichnis .SH ÜBERSICHT .nf \fB#include \fP .PP \fBstruct dirent *readdir(DIR *\fP\fIdirp\fP\fB);\fP .fi .SH BESCHREIBUNG Die Funktion \fBreaddir\fP() liefert einen Zeiger auf eine \fIdirent\fP\-Struktur zurück, welche den nächsten Eintrag in dem Verzeichnis\-Stream darstellt, auf das \fIdirp\fP weist. Falls das Dateiende erreicht wurde oder ein Fehler auftrat, wird ein NULL\-Zeiger zurückgegeben. .PP In der Glibc\-Implementierung ist die Struktur \fIdirent\fP wie folgt definiert: .PP .in +4n .EX struct dirent { ino_t d_ino; /* Inode\-Nummer */ off_t d_off; /* kein Offset; siehe ANMERKUNGEN */ unsigned short d_reclen; /* Länge dieses Datensatzes */ unsigned char d_type; /* Dateityp; nicht von allen Dateisystemtypen unterstützt */ char d_name[256]; /* Null\-terminierter Dateiname */ }; .EE .in .PP POSIX.1 fordert in der \fIdirent\fP\-Struktur lediglich die Felder \fId_name\fP und \fId_ino\fP. Die anderen Felder sind nicht standardisiert und nicht auf allen Systemen vorhanden; siehe die folgenden ANMERKUNGEN für einige weitere Details. .PP Die Felder der Struktur \fIdirent\fP sind wie folgt definiert: .TP \fId_ino\fP Dies ist die Inode\-Nummer der Datei. .TP \fId_off\fP .\" https://lwn.net/Articles/544298/ Der in \fId_off\fP zurückgegebene Wert ist der gleiche, als wenn \fBtelldir\fP(3) an der aktuellen Position im Verzeichnis\-Stream aufgerufen werden würde. Beachten Sie, dass ungeachtet des Typs und Namens das \fId_off\fP\-Feld in modernen Dateisystemen selten ein Verzeichnis\-Offset irgendeiner Art ist. Anwendungen sollten dieses Feld als verdeckten Wert auffassen und keine Vermutungen über dessen Inhalt anstellen; siehe auch \fBtelldir\fP(3). .TP \fId_reclen\fP Dies ist die Größe (in Bytes) des zurückgelieferten Datensatzes. Dies könnte auf die Größe der oben gezeigten Strukturdefinition nicht passen; siehe ANMERKUNGEN. .TP \fId_type\fP Dieses Feld enthält einen Wert, der den Dateityp anzeigt und es damit ermöglicht, die Kosten für den Aufruf von \fBlstat\fP(2) zu vermeiden, falls weitere Aktionen von dem Dateityp abhängen. .IP Falls ein geeignetes Feature\-Test\-Makro (\fB_DEFAULT_SOURCE\fP unter Glibc\-Versionen seit 2.19 oder \fB_BSD_SOURCE\fP unter Glibc\-Versionen 2.19 und älter) definiert ist, definiert Glibc die folgenden Makrokonstanten für den in \fId_type\fP zurückgelieferten Wert: .RS .TP 12 \fBDT_BLK\fP Dies ist ein blockorientiertes Gerät. .TP \fBDT_CHR\fP Dies ist ein zeichenorientiertes Gerät. .TP \fBDT_DIR\fP Dies ist ein Verzeichnis. .TP \fBDT_FIFO\fP Dies ist ein FIFO (eine benannte Pipe). .TP \fBDT_LNK\fP Dies ist ein symbolischer Link. .TP \fBDT_REG\fP Dies ist eine reguläre Datei. .TP \fBDT_SOCK\fP Dies ist ein UNIX Domain Socket. .TP \fBDT_UNKNOWN\fP Der Dateityp konnte nicht ermittelt werden. .RE .IP .\" kernel 2.6.27 .\" The same sentence is in getdents.2 Derzeit unterstützen nur ein paar Dateisysteme (darunter Btrfs, ext2, ext3 und ext4) die Rückgabe des Dateityps in \fId_type\fP vollständig. Alle Anwendungen müssen mit dem Rückgabewert \fBDT_UNKNOWN\fP umgehen können. .TP \fId_name\fP Dieses Feld enthält den Null\-terminierten Dateinamen. \fISiehe ANMERKUNGEN\fP. .PP Die von \fBreaddir\fP() zurückgegebenen Daten können bei nachfolgenden Aufrufen von \fBreaddir\fP() für den gleichen Verzeichnis\-Stream überschrieben werden. .SH RÜCKGABEWERT Nach erfolgreichem Abschluss gibt \fBreaddir\fP() einen Zeiger auf eine \fIdirent\fP\-Struktur zurück. (Diese Struktur kann statisch bereitgestellt worden sein; versuchen Sie nicht, den Speicher mittels \fBfree\fP(3) freizugeben.) .PP Falls das Ende des Verzeichnis\-Streams erreicht wird, ist der Rückgabewert NULL und \fIerrno\fP wird nicht geändert. Wenn ein Fehler eintritt, wird NULL zurückgegeben und \fIerrno\fP wird entsprechend gesetzt. Um das Ende des Streams von einem Fehler zu unterscheiden, setzen Sie vor dem Aufruf von \fBreaddir\fP() \fIerrno\fP auf Null und prüfen dann den Wert von \fIerrno\fP, falls NULL zurückgeliefert wurde. .SH FEHLER .TP \fBEBADF\fP Unzulässiger Deskriptor für den Verzeichnis\-Stream \fIdirp\fP. .SH ATTRIBUTE Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke. .TS allbox; lb lb lb l l l. Schnittstelle Attribut Wert T{ \fBreaddir\fP() T} Multithread\-Fähigkeit MT\-Unsafe race:dirstream .TE .sp 1 .PP .\" FIXME . .\" http://www.austingroupbugs.net/view.php?id=696 In der aktuellen POSIX.1\-Spezifikation (POSIX.1\-2008) muss \fBreaddir\fP() nicht Thread\-sicher sein. Bei modernen Implementierungen (einschließlich der Glibc\-Implementierung) sind gleichzeitige Aufrufe von \fBreaddir\fP(), die verschiedene Verzeichnis\-Streams festlegen, Thread\-sicher. In Fällen, in denen mehrere Threads vom gleichen Verzeichnis\-Stream lesen müssen, wird die Verwendung von \fBreaddir\fP() mit externere Synchronisation immer noch der Verwendung der veralteten Funtion \fBreaddir_r\fP(3) vorgezogen. Es wird erwartet, dass zukünftige Versionen von POSIX.1 verlangen werden, dass \fBreaddir\fP() Thread\-sicher ist, wenn es parallel auf verschiedene Verzeichnis\-Streams angewandt wird. .SH "KONFORM ZU" POSIX.1\-2001, POSIX.1\-2008, SVr4, 4.3BSD. .SH ANMERKUNGEN Ein Verzeichnis\-Stream wurde mittels \fBopendir\fP(3) geöffnet. .PP Die Reihenfolge, in der Dateinamen durch sukzessive Aufrufe von \fBreaddir\fP() gelesen werden, hängt von der Dateisystemimplementierung ab; es ist daher unwahrscheinlich, dass die Namen in irgendeiner Weise sortiert sein werden. .PP .\" POSIX.1-2001, POSIX.1-2008 .\" Von POSIX.1 werden nur die Felder \fId_name\fP und (als XSI\-Erweiterung) \fId_ino\fP beschrieben. Neben Linux ist das Feld \fId_type\fP hauptsächlich auf BSD\-Systemen verfügbar. Die restlichen Felder sind auf vielen, aber nicht allen Systemen verfügbar. Unter Glibc können Programme die Verfügbarkeit der nicht von POSIX.1 definierten Felder überprüfen. Dazu müssen sie prüfen, ob die Makros \fB_DIRENT_HAVE_D_NAMLEN\fP, \fB_DIRENT_HAVE_D_RECLEN\fP, \fB_DIRENT_HAVE_D_OFF\fP oder \fB_DIRENT_HAVE_D_TYPE\fP definiert sind. .SS "Das Feld d_name" Die oben gezeigte Strukturdefinition \fIdirent\fP stammt aus den Glibc\-Headern und zeigt das Feld \fId_name\fP mit einer festen Größe. .PP \fIWarnung\fP: Anwendungen sollten Abhängigkeiten von der Größe des Feldes \fId_name\fP vermeiden. POSIX definiert es als \fIchar\ d_name[]\fP, ein Zeichenfeld von unbestimmter Größe, mit höchstens \fBNAME_MAX\fP Zeichen vor dem abschließenden Null\-Byte (\(aq\e0\(aq). .PP POSIX.1 bemerkt explizit, dass dieses Feld nicht als Lvalue verwandt werden soll. Der Standard merkt auch an, dass die Verwendung von \fIsizeof(d_name)\fP nicht korrekt ist; verwenden Sie stattdessen \fIstrlen(d_name)\fP. (Auf einigen Systemen ist dieses Feld als \fIchar\ d_name[1]\fP definiert!) Daraus ergibt sich, dass die Verwendung von \fIsizeof(struct dirent)\fP zu Ermittlung der Größe des Datensatze einschließlich der Größe von \fId_name\fP auch nicht korrekt ist. .PP Beachten Sie, dass obwohl der Aufruf .PP fpathconf(fd, _PC_NAME_MAX) .PP für die meisten Dateisysteme den Wert 255 zurückliefert, auf einigen Dateisystemen (z.B. CIFS und Windows\-SMB\-Servern) der Null\-terminierte Dateiname, der (korrekterweise) in \fId_name\fP zurückgeliefert wird, diese Größe tatsächlich überschreiten kann. In diesen Fällen wird das Feld \fId_reclen\fP einen Wert enthalten, der die Größe der oben gezeigten Glibc\-Struktur \fIdirent\fP überschreitet. .SH "SIEHE AUCH" \fBgetdents\fP(2), \fBread\fP(2), \fBclosedir\fP(3), \fBdirfd\fP(3), \fBftw\fP(3), \fBoffsetof\fP(3), \fBopendir\fP(3), \fBreaddir_r\fP(3), \fBrewinddir\fP(3), \fBscandir\fP(3), \fBseekdir\fP(3), \fBtelldir\fP(3) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 4.16 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Markus Kaufmann , Martin Eberhard Schauer und Helge Kreutzmann erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an .