table of contents
other languages
FTW(3) | Manuel du programmeur Linux | FTW(3) |
NOM¶
ftw, nftw - Parcourir des arborescences de fichiersSYNOPSIS¶
#include <ftw.h>int ftw(const char *dirpath, int (*fn) (const char *fpath, const struct stat *sb, int typeflag), int nopenfd);#define _XOPEN_SOURCE 500 /* Consultez feature_test_macros(7) */ #include <ftw.h>int nftw(const char *dirpath, int (*fn) (const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf), int nopenfd, int flags);
DESCRIPTION¶
La fonction ftw() parcourt une arborescence de fichiers située dans le répertoire dirpath et appelle fn() pour chaque entrée de l'arborescence. Par défaut, les répertoires sont traités avant les fichiers et sous-répertoires qu'ils contiennent.- FTW_F
- fpath est un fichier régulier.
- FTW_D
- fpath est un répertoire.
- FTW_DNR
- fpath est un répertoire non lisible.
- FTW_NS
- L'appel stat(2) a échoué sur fpath,
qui n'est pas un lien symbolique.
nftw()¶
La fonction nftw() fait exactement la même chose que ftw(), sauf qu'elle utilise un argument flags et appelle fn() avec un argument supplémentaire ftwbuf.- FTW_ACTIONRETVAL (depuis la glibc 2.3.3)
- Si ce drapeau, spécifique à la glibc, est positionné, alors nftw() gère la valeur de retour de fn() différemment. fn() devrait renvoyer l'une des valeurs suivantes :
- FTW_CONTINUE
- nftw() va continuer normalement.
- FTW_SKIP_SIBLINGS
- Si fn() renvoie cette valeur, alors les « siblings » des entrées courantes seront passées, et la procédure continuera avec le parent.
- FTW_SKIP_SUBTREE
- Si fn() est appelée avec une entrée qui est un répertoire ( typeflag vaut FTW_D), cette valeur de retour prévient les objets dans ce répertoire d'être passés comme argument à fn(). nftw() continue avec le « sibling » suivant du répertoire.
- FTW_STOP
- nftw() retourne immédiatement avec la valeur de retour FTW_STOP.
- FTW_CHDIR
- Si défini, faire un chdir(2) avec chaque répertoire avant de traiter son contenu. C'est utile si le programme doit exécuter des actions dans le répertoire où fpath réside.
- FTW_DEPTH
- Si défini, faire une recherche « postorder » ; c'est-à-dire, appeler fn() pour le répertoire lui-même après avoir traité son contenu et celui de ses sous-répertoires (par défaut chaque répertoire est traité avant son contenu).
- FTW_MOUNT
- Si défini, rester uniquement dans le même système de fichiers (p. ex. : ne pas parcourir un point de montage).
- FTW_PHYS
- Si défini, ne pas suivre les liens symboliques (c'est
ce que l'on veut). Si non défini, les liens symboliques sont suivis,
mais aucun fichier n'est traité plus d'une fois.
- FTW_DP
- fpath est un répertoire, et FTW_DEPTH a été défini dans flags. Tous les fichiers et les sous-répertoires dans fpath ont été traités.
- FTW_SL
- fpath est un lien symbolique, et FTW_PHYS a été défini dans flags.
- FTW_SLN
- fpath est un lien symbolique pointant nulle part. Cela ne se produit que si FTW_PHYS n'est pas défini.
struct FTW { int base; int level; };
base est le décalage du nom de fichier (« basename ») du chemin donné par fpath. level est la profondeur de fpath dans l'arbre des répertoires, relative à la racine de l'arbre ( dirpath qui a une profondeur nulle).
VALEUR RENVOYÉE¶
Ces fonctions renvoie 0 en cas de succès et -1 en cas d'erreur.CONFORMITɶ
POSIX.1-2001, SVr4, SUSv1. POSIX.1-2008 marque ftw() comme étant obsolète.NOTES¶
POSIX.1-2001 indique que les résultats sont imprévisibles si fn ne préserve pas le répertoire de travail actuel. La fonction nftw() et l'utilisation de FTW_SL() avec ftw() ont été introduites dans SUSv1. Sur certains systèmes, ftw() n'utilise jamais FTW_SL, sur d'autres, FTW_SL ne survient que pour les liens symboliques pointant nulle part, sur d'autres encore, ftw() utilise FTW_SL pour chaque lien symbolique. Pour un fonctionnement prévisible, employez nftw(). Sous Linux, les libc4, libc5 et glibc 2.0.6 utilisent FTW_F pour tous les objets (fichier, lien symbolique, fifo, etc.), sauf pour les répertoires, qui peuvent être utilisés par stat.EXEMPLE¶
Le programme suivant parcours l'arbre des répertoires du chemin donné en premier argument de la ligne de commande ou du répertoire courant s'il n'est pas spécifié. Il affiche divers informations à propos de chaque fichier. Le second argument de la ligne de commande peut être utilisé pour spécifier les caractères assignés à l'argument flags lors des appels de nftw().#define _XOPEN_SOURCE 500 #include <ftw.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> static int display_info(const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf) { printf("%-3s %2d %7jd %-40s %d %s\n", (tflag == FTW_D) ? "d" : (tflag == FTW_DNR) ? "dnr" : (tflag == FTW_DP) ? "dp" : (tflag == FTW_F) ? "f" : (tflag == FTW_NS) ? "ns" : (tflag == FTW_SL) ? "sl" : (tflag == FTW_SLN) ? "sln" : "???", ftwbuf->level, (intmax_t) sb->st_size, fpath, ftwbuf->base, fpath + ftwbuf->base); return 0; /* To tell nftw() to continue */ } int main(int argc, char *argv[]) { int flags = 0; if (argc > 2 && strchr(argv[2], 'd') != NULL) flags |= FTW_DEPTH; if (argc > 2 && strchr(argv[2], 'p') != NULL) flags |= FTW_PHYS; if (nftw((argc < 2) ? "." : argv[1], display_info, 20, flags) == -1) { perror("nftw"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }
VOIR AUSSI¶
stat(2), fts(3), readdir(3)COLOPHON¶
Cette page fait partie de la publication 3.44 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <http://www.kernel.org/doc/man-pages/>.TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>. Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009). Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le paquet manpages-fr. Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».20 septembre 2010 | Linux |