Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       ftw, nftw - Parcourir des arborescences de fichiers

SYNOPSIS

       #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.

       Afin d'éviter d'utiliser tous les descripteurs de fichier disponibles pour le programme, nopenfd  indique
       le  nombre  maximal  de répertoires que ftw() peut ouvrir de manière simultanée. Lorsque la profondeur de
       recherche est supérieure à cette valeur, ftw() ralentit car les  répertoires  doivent  être  fermés  puis
       réouverts.  ftw()  utilise  au  plus un descripteur de fichier pour chaque niveau dans l'arborescence des
       fichiers.

       Pour chaque entrée trouvée dans l'arbre, ftw() appelle fn() avec trois arguments : fpath, sb et typeflag.
       fpath est le chemin de l'entrée , il est soit défini comme un chemin  relatif  au  répertoire  actuel  de
       travail  du  processus  appelant à l'instant de l'appel à ftw() si dirpath est un chemin relatif, ou soit
       comme un chemin absolu si dirpath est un chemin absolu.  sb  est  un  pointeur  vers  la  structure  stat
       renvoyée par un appel à stat(2) pour fpath. typeflag est un entier qui a une des valeurs suivantes :

       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. C’est probablement dû au
              fait que l’appelant avait les droits de lecture dans le répertoire parent, de tel sorte que  fpath
              était  visible,  mais pas les droits d’exécution, donc le fichier ne pouvait pas être atteint pour
              stat(2).

              Si fpath est un lien symbolique et que stat(2) échoue, POSIX.1-2001 précise que c'est indéfini  si
              FTW_NS ou FTW_SL sont passés à typeflag (consultez ci-dessous).

       Pour  arrêter  le  parcours des arborescences de fichiers, la fonction fn() renvoie une valeur non nulle,
       qui deviendra la valeur de retour de ftw(). Tant que fn() renvoie 0, ftw() continuera jusqu'à la  fin  du
       parcours de l'arborescence, et dans ce cas renverra zéro, ou jusqu'à ce que une erreur se produise (comme
       pour malloc(3)) et renverra -1.

       Comme  ftw()  utilise des structures de données allouées dynamiquement, la seule manière propre de sortir
       d'un parcours d'arborescence est de renvoyer une valeur non nulle depuis fn(). Pour permettre à un signal
       de terminer le parcours sans causer de fuite de mémoire, utilisez un « handler » qui définit un  attribut
       vérifié par fn(). N'utilisez pas longjmp(3) à moins que le programme ne soit prêt à se terminer.

   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.

       L'argument flags est un OU regroupant zéro ou certains des attributs suivants :

       FTW_ACTIONRETVAL (depuis la glibc 2.3.3)
              Si cet attribut, 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() quitte immédiatement avec la valeur de retour FTW_STOP.

              Les autres valeurs de retour pourront être associées avec une nouvelle action dans le  futur ;  fn
              ne devrait renvoyer que les valeurs citées ci-dessus.

              La  macro de test _GNU_SOURCE doit être définie (avant toute inclusion de fichiers d'en-tête) afin
              d'obtenir la définition de FTW_ACTIONRETVAL depuis <ftw.h>.

       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.

              Si FTW_PHYS n'est pas défini, mais si FTW_DEPTH l'est, alors la fonction fn() n'est jamais appelée
              pour un répertoire que l'on retrouve dans ses propres descendants.

       Pour chaque entrée de l'arbre du répertoire, nftw() appelle fn() avec quatre arguments : fpath et sb sont
       les mêmes que pour ftw(). typeflag peut prendre l'une des valeurs définies par ftw() ou l'une des valeurs
       suivantes :

       FTW_DP fpath  est  un  répertoire, et FTW_DEPTH a été défini dans flags. (Si FTW_DEPTH n’était pas défini
              dans flags, alors les répertoires seront toujours visités avec typeflag défini à FTW_D.) 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.

       Le quatrième argument qu'utilise nftw() lorsqu'elle appelle fn est une structure du type FTW :

           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.

       Si fn() renvoie une valeur non nulle, alors le parcours de l'arbre se termine et la valeur  renvoyée  par
       fn() est renvoyée comme résultat de ftw() ou nftw().

       Si  nftw()  est  appelé avec l’attribut FTW_ACTIONRETVAL, alors la seule valeur non nulle qui pourra être
       utilisée par fn() pour terminer le parcours de l'arbre est FTW_STOP, et cette valeur est  renvoyée  comme
       le résultat de nftw().

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.

       La fonction nftw() est disponible depuis la glibc 2.1.

       FTW_ACTIONRETVAL est spécifique à la glibc.

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 indiqué. Il affiche divers informations à propos de
       chaque fichier. Le second argument de la ligne de commande peut être utilisé pour indiquer les caractères
       assignés à l'argument flags lors des appels de nftw().

   Source du programme
       #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.65 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> ».

Linux                                            11 janvier 2014                                          FTW(3)