Definition | #include <ftw.h> int nftw(const char *path,
int (*fn) (const char *, const struct stat *, in , struct FTW *),
int depth, int flags); int nftw64(const char *path,
int (*fn) (const char *, const struct stat64 *, in , struct FTW *),
int depth, int flags); CRTE111A30 int nftwx(const char *path,
int (*fn) (const char *, const struct statx *, in , struct FTW *),
int depth, int flags); int nftw64x(const char *path,
int (*fn) (const char *, const struct stat64x *, in , struct FTW *),
int depth, int flags); (Ende) |
Beschreibung | nftw() durchsucht rekursiv die Dateiverzeichnis-Hierarchie, die mit path beginnt. nftw() arbeitet ähnlich wie ftw() , verarbeitet aber zusätzlich das Argument flags, das durch bitweises inklusives ODER der folgenden Werte gebildet wird:
FTW_CHDIR
| das jeweils durchsuchte Verzeichnis wird zum aktuellen Arbeitsverzeichnis. Ist FTW_CHDIR nicht gesetzt, bleibt das aktuelle Arbeitsverzeichnis unverändert. | FTW_DEPTH
| vor dem Verzeichnis selbst werden erst alle Unterverzeichnisse durchwandert. Ist FTW_DEPTH nicht gesetzt, wird erst das Verzeichnis durchwandert. | FTW_MOUNT
| es werden nur Verzeichnisse durchwandert, die in demselben Dateisystem liegen wie path. Ist FTW_MOUNT nicht gesetzt, werden auch gemountete Verzeichnisse durchwandert. | FTW_PHYS
| Die Dateiverzeichnis-Hierarchie wird physikalisch durchwandert; nftw() folgt keinen symbolischen Verweisen, sondern meldet die Verweise. Ist FTW_PHYS nicht gesetzt, folgt nftw() symbolischen Verweisen. nftw() meldet nicht zweimal die gleiche Datei. | Für jede gefundene Datei bzw. jedes gefundene Verzeichnis ruft nftw() die benutzerdefinierte Funktion fn mit folgenden vier Argumenten auf: Pfadname des Objekts. Zeiger auf den stat -Puffer, der Informationen über das Objekt enthält enthält (erlangt durch Aufruf der Funktion stat() ). Zahl vom Typ Integer, in der nftw() zusätzliche Informationen liefert. FTW_F
| Das Objekt ist eine Datei. | FTW_D
| Das Objekt ist ein Verzeichnis. | FTW_DP
| Das Objekt ist ein Verzeichnis, Unterverzeichnisse wurden bereits durchwandert (dieser Fall kann nur auftreten, wenn in flags der Wert FTW_DEPTH enthalten ist). | FTW_SLN
| Das Objekt ist ein symbolischer Verweis, der auf eine nicht vorhandene Datei zeigt (dieser Fall kann nur auftreten, wenn in flags nicht der Wert FTW_PHYS enthalten ist). | FTW_NS
| stat() kann das Objekt auf Grund unzureichender Zugriffsrechte nicht bearbeiten. Der an fn übergebene stat -Puffer ist undefiniert. Wenn stat() aus anderen Gründen scheitert, schlägt nftw() fehl und gibt -1 zurück.
| FTW_DNR
| Das Objekt ist ein Verzeichnis, das nicht gelesen werden kann. fn() wird für keine der darin liegenden Dateien oder darunter liegenden Verzeichnisse aufgerufen. | Zeiger auf ein struct FTW , das die folgenden Elemente enthält: int base;
int level;
nftw() verwendet jeweils einen Dateideskriptor für jede Ebene im Dateibaum. Das Argument depth begrenzt die Anzahl der verwendeten Dateideskriptoren. Ist depth 0 oder negativ, hat das die gleiche Wirkung wie der Wert 1. depth darf nicht größer sein als die Anzahl der zum gegebenen Zeitpunkt zur Verfügung stehenden Dateideskriptoren. Wenn die Funktion nftw() zurückkehrt, schließt sie alle Dateideskriptoren, die sie geöffnet hat; sie schließt aber keine Dateideskriptoren, die von fn geöffnet wurden.
Der Dateibaum wird von der obersten Hierarchiestufe an durchwandert, bis der Baum vollständig durchwandert ist, ein Aufruf von fn einen Wert ungleich 0 zurückgibt oder ein Fehler innerhalb nftw() (wie z.B. ein E/A-Fehler) festgestellt wird. Es besteht kein funktionaler Unterschied zwischen nftw() und nftw64() , außer dass nftw64() stat64() anstelle von stat( ) aufruft und einen Zeiger auf eine stat64 -Struktur an fn übergibt. Die Funktionen mit dem Suffix x verhalten sich, wie die gleichnamigen Funktionen ohne Suffix, außer dass sie die entsprechende stat() -Funktion und stat -Struktur ebenfalls mit Suffix x referenzieren und daher auch über den 19.1.2038 03:14:07 Uhr UTC hinaus korrekt funktionieren. |
Returnwert | 0 | wenn der Baum vollständig durchwandert ist und fn() immer den Wert 0 zurückgeliefert hat. |
| Rückgabewert der Funktion fn() |
|
| wenn fn() einen Wert != 0 zurückgibt, stoppt nftw() das Durchwandern des Dateibaums und gibt den Wert zurück, der von fn zurückgegeben wurde |
| -1 | wenn nftw() einen anderen Fehler als EACCES feststellt. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | nftw() , nftw64() , nftwx() und nftw64x() schlagen fehl, wenn gilt:
|
| EACCES
| Für eine Komponente von path besteht kein Suchrecht oder für path besteht kein Leserecht oder fn() gibt den Wert -1 zurück und setzt nicht zurück. |
| ENAMETOOLONG
|
|
| Die Länge des Arguments path ist größer als {PATH_MAX} oder eine Komponente des Pfadnamens ist länger als {NAME_MAX} . Bei der Auflösung eines symbolischen Verweises in path kam es zu einem Zwischenergebnis, dessen Länge {PATH_MAX} überschreitet. |
| ENOENT
| Eine Komponente des Pfadpräfixes existiert nicht oder path ist eine leere Zeichenkette. |
| ENOTDIR
| Eine Komponente von path ist kein Dateiverzeichnis. |
| ELOOP
| Bei der Auflösung von path traten zuviele symbolische Verweise auf. |
| EMFILE
| Es sind bereits {OPEN_MAX} Dateideskriptoren geöffnet. |
| ENFILE
| Es sind zu viele Dateien geöffnet. |
| Außerdem kann errno gesetzt sein, wenn stat() oder die Funktion, auf die fn() zeigt, errno setzt. |
Hinweis | Da nftw() rekursiv ist, besteht die Möglichkeit, dass es mit einem Speicherfehler abbricht, wenn es auf Dateibäume mit zu vielen Hierarchieebenen angewendet wird. |
Siehe auch | ftw() , lstat() , opendir() , readdir() , stat() , ftw.h .
|