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

NOM

       fts, fts_open, fts_read, fts_children, fts_set, fts_close - Parcourir une hiérarchie de fichiers

SYNOPSIS

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fts.h>

       FTS *fts_open(char * const *path_argv, int options,
                     int (*compar)(const FTSENT **, const FTSENT **));

       FTSENT *fts_read(FTS *ftsp);

       FTSENT *fts_children(FTS *ftsp, int options);

       int fts_set(FTS *ftsp, FTSENT *f, int options);

       int fts_close(FTS *ftsp);

DESCRIPTION

       Les  fonctions  de la famille fts servent à traverser des hiérarchies de fichiers. Rapidement, disons que
       la fonction fts_open() renvoie une sorte de descripteur de la hiérarchie de fichiers,  que  l'on  fournit
       ensuite  aux  autres  fonctions  de  la  famille  fts. La fonction fts_read() renvoie un pointeur sur une
       structure décrivant l'un des fichiers de l'arborescence. La fonction fts_children() renvoie  un  pointeur
       sur une liste chaînée de structures, chacune décrivant l'un des fichiers contenu dans le répertoire de la
       hiérarchie.  En  général,  les  répertoires sont visités à deux reprises, distinctes. Un passage en ordre
       « preorder » avant d'avoir parcouru leurs descendants, et un passage en ordre « postorder »  après  avoir
       visité  tous  les  sous-répertoires.  Les fichiers ne sont examinés qu'une seule fois. Il est possible de
       parcourir la hiérarchie « logiquement » (en visitant les fichiers pointés par les liens  symboliques)  ou
       « physiquement »  (en  visitant  les  liens  symboliques  eux-mêmes).  On peut ordonner le parcours de la
       hiérarchie, ignorer ou visiter plusieurs fois certaines parties.

       Deux structures sont définies (avec typedef) dans le fichier d'en-tête <fts.h>. La première est FTS,  une
       structure  représentant  l'arborescence  des  fichiers elle-même, et la seconde est FTSENT, une structure
       représentant un fichier dans la hiérarchie. Normalement, une structure FTSENT est  renvoyée  pour  chaque
       fichier  rencontré  dans  la hiérarchie. Dans cette page de manuel, les termes « fichier » et « structure
       FTSENT » sont généralement interchangeables. La structure FTSENT contient au moins les  champs  suivants,
       décrits en détail ci-dessous :

           typedef struct _ftsent {
               unsigned short fts_info;     /* attribut de la structure FTSENT */
               char          *fts_accpath;  /* chemin d'accès */
               char          *fts_path;     /* chemin de la racine */
               short          fts_pathlen;  /* strlen(fts_path) */
               char          *fts_name;     /* non du fichier */
               short          fts_namelen;  /* strlen(fts_name) */
               short          fts_level;    /* profondeur (-1 à N) */
               int            fts_errno;    /* fichier errno */
               long           fts_number;   /* valeur numérique locale */
               void          *fts_pointer;  /* valeur de l'adresse locale */
               struct ftsent *fts_parent;   /* répertoire parent */
               struct ftsent *fts_link;     /* fichier de structure suivant */
               struct ftsent *fts_cycle;    /* cycle structure */
               struct stat   *fts_statp;    /* information sur stat(2) */
           } FTSENT;

       Les membres ont les significations suivantes :

       fts_info    L'un  des attributs suivants, décrivant la structure FTSENT et le fichier qu'elle représente.
                   Toutes ces entrées sont terminales (sauf les répertoires FTS_D ne présentant  pas  d'erreur),
                   ce  qui  signifie  qu'elle  ne  seront  visitées  qu'une  seule  fois,  et que leur éventuels
                   descendants (cas des répertoires en erreur) ne seront pas visités.

                   FTS_D       Un répertoire visité en phase « preorder ».

                   FTS_DC      Un répertoire introduisant une boucle dans l'arborescence. Le champ fts_cycle  de
                               la structure FTSENT sera également remplis.

                   FTS_DEFAULT Toute  structure  FTSENT représentant un type de fichier non décrit explicitement
                               par l'une des autres valeurs de fts_info.

                   FTS_DNR     Un répertoire ne pouvant être lu. C'est considéré comme une erreur, et  le  champ
                               fts_errno sera défini avec une valeur décrivant sa cause.

                   FTS_DOT     Un  fichier  nommé  « . »  ou  « .. » qui n'a pas été indiqué explicitement comme
                               argument de fts_open() (consultez FTS_SEEDOT).

                   FTS_DP      Un répertoire visité en phase « postorder ». Le contenu de la structure FTSENT ne
                               sera pas différent de ce qu'il était après la  phase  « preorder ».  C'est-à-dire
                               quand le champ fts_info valait FTS_D.

                   FTS_ERR     Il  s'agit d'un retour d'erreur, le champ fts_errno étant rempli pour indiquer la
                               cause de l'erreur.

                   FTS_F       Un fichier normal.

                   FTS_NS      Un fichier pour lequel aucune information provenant de stat(2) n'est  disponible.
                               Le  contenu  du champ fts_statp est indéfini. Il s'agit d'un cas d'erreur dont la
                               cause est indiquée dans fts_errno.

                   FTS_NSOK    Un fichier pour lequel aucune information provenant de stat(2) n'a été  demandée.
                               Le contenu du champ fts_statp est indéfini.

                   FTS_SL      Un lien symbolique.

                   FTS_SLNONE  Un  lien symbolique pointant dans le vide. Le contenu du champ fts_statp contient
                               les caractéristiques du lien lui-même.

       fts_accpath Un chemin permettant d'accéder au fichier depuis le répertoire courant.

       fts_path    Le chemin d'accès au fichier à partir du point de départ du parcours. Il contient en  préfixe
                   le chemin fourni lors de l'invocation de fts_open().

       fts_pathlen La longueur de la chaîne pointée par fts_path.

       fts_name    Le nom du fichier.

       fts_namelen La longueur de la chaîne pointée par fts_name.

       fts_level   La  profondeur  où  le  fichier  a  été  trouvé  dans l'arborescence, numérotée de -1 à N. La
                   structure FTSENT représentant le parent du point de départ est  numérotée  -1.  La  structure
                   FTSENT représentant la racine de départ elle-même est numérotée 0.

       fts_errno   Dans  une  structure FTSENT renvoyée par un appel fts_children() ou fts_read(), dont le champ
                   fts_info contient FTS_DNR, FTS_ERR ou FTS_NS, le champ fts_errno est défini avec la valeur de
                   la variable externe errno indiquant la cause de l'erreur. Dans les autres cas, le contenu  du
                   champ fts_errno est indéfini.

       fts_number  Ce  champ  est  mis  à la disposition des programmes applicatifs, et n'est modifié par aucune
                   fonction de la famille fts. Il est toutefois initialisé à zéro.

       fts_pointer Ce champ est mis à la disposition des programmes applicatifs, et  n'est  modifié  par  aucune
                   fonction de la famille fts. Il est toutefois initialisé à NULL.

       fts_parent  Un  pointeur  sur la structure FTSENT référençant le fichier dans la hiérarchie immédiatement
                   au dessus du fichier en cours, c'est-à-dire le répertoire auquel il appartient. Une structure
                   parente pour le point  d'entrée  initial  est  également  fournie,  mais  seuls  ses  membres
                   fts_level, fts_number et fts_pointer sont garantis d'être initialisés.

       fts_link    Au  retour  de la fonction fts_children(), le champ fts_link pointe sur la structure suivante
                   dans la liste chaînée des membres du répertoires, liste terminée par un NULL. Dans les autres
                   situations, le contenu du champ fts_link est indéterminé.

       fts_cycle   Si un répertoire introduit une boucle dans la hiérarchie (consultez FTS_DC),soit à cause d'un
                   lien physique entre deux répertoires, soit à cause d'un  lien  symbolique  pointant  vers  un
                   répertoire,  le  champ  fts_cycle  pointera  vers  la  structure  FTSENT de la hiérarchie qui
                   référence le même fichier que celui représenté par la structure FTSENT. Sinon, le contenu  du
                   champ fts_cycle est indéfini.

       fts_statp   Un pointeur vers les informations fournies par stat(2).

       Un  tampon unique est utilisé pour tous les chemins d'accès de tous les fichiers de la hiérarchie. Ainsi,
       les champs fts_path et fts_accpath sont assurés d'être terminés par un caractère nul  seulement  pour  le
       fichier  renvoyé  le  plus  récemment par fts_read(). Pour utiliser ces champs pour référencer un fichier
       représenté par une  autre  structure  FTSENT,  il  faut  que  le  chemin  du  tampon  soit  modifié  avec
       l'information  contenu dans le champ fts_pathlen de cette structure FTSENT. Tout autre modification devra
       être défaite avant que d'autres appels à fts_read() ne soient tentés.  Le  champ  fts_name  est  toujours
       terminé par un caractère nul.

   fts_open()
       La  fonction  fts_open()  reçoit  un  pointeur vers une table de chaînes de caractères représentant un ou
       plusieurs chemins décrivant la hiérarchie de fichiers à traverser. Cette table doit se  terminer  par  un
       pointeur NULL.

       Il  existe  un  certain  nombre  d'options,  dont  au moins une est obligatoire (soit FTS_LOGICAL ou soit
       FTS_PHYSICAL). Les options sont sélectionnées par un ou logique entre les valeurs suivantes :

       FTS_COMFOLLOW
                    Tout  lien  symbolique  indiqué  comme  racine  du   parcours   sera   immédiatement   suivi
                    (déréférencé), que l'option FTS_LOGICAL soit indiquée ou non.

       FTS_LOGICAL  Cette  option  indique  aux  fonctions  fts de renvoyer des structures FTSENT concernant les
                    cibles des liens symboliques plutôt que les liens eux-mêmes. Avec cette  option,  les  seuls
                    liens symboliques pour lesquels une structure FTSENT est renvoyée sont ceux pointant dans le
                    vide. Il faut préciser soit FTS_LOGICAL, soit FTS_PHYSICAL à la fonction fts_open().

       FTS_NOCHDIR  Pour  optimiser  les  performances,  les fonctions fts changent de répertoire au cours de la
                    traversée de la hiérarchie de fichiers. En contrepartie, l'application ne peut pas savoir  à
                    l'avance  où  elle  se  trouve  durant  la  traversée.  L'option  FTS_NOCHDIR supprime cette
                    optimisation et les fonctions fts ne changeront pas de répertoire de travail. Remarquez  que
                    les  applications  ne  doivent  pas  modifier elles-même le répertoire de travail et essayer
                    d'accéder aux fichiers sans que l'option FTS_NOCHDIR ne soit indiquée  et  que  des  chemins
                    d'accès absolus soient transmis à fts_open().

       FTS_NOSTAT   Par  défaut, les structures FTSENT renvoyées contiennent les caractéristiques (voir le champ
                    statp) de chaque fichier visité. Cette option relâche cette contrainte  pour  optimiser  les
                    performances,  en  autorisant les fonctions fts à remplir le champ fts_info avec FTS_NSOK et
                    laisser le contenu du membre statp indéfini.

       FTS_PHYSICAL Avec cette option,  les  routines  fts  renvoient  des  structures  FTSENT  pour  les  liens
                    symboliques  eux-mêmes et non pas les fichiers qu'ils pointent. Si cette option est définie,
                    des structures FTSENT pour tous les liens symboliques de  la  hiérarchie  sont  renvoyées  à
                    l'application.  Soit  FTS_LOGICAL  ou  soit  FTS_PHYSICAL  doit  être  fourni  à la fonction
                    fts_open().

       FTS_SEEDOT   Par défaut, à moins d'être fournis explicitement en  argument  à  fts_open()  ,tout  fichier
                    nommé  « . »  ou  « .. »  rencontré  dans  la  hiérarchie est ignoré. Avec cette option, les
                    routines fts renvoient des structures FTSENT pour ces fichiers.

       FTS_XDEV     Cette option empêche fts de descendre dans les répertoires se trouvant sur  un  périphérique
                    différent de celui dans lequel le parcours a commencé.

       L'argument  compar()  indique  une  fonction  définie  par l'utilisateur pour ordonner la traversée de la
       hiérarchie. Elle prend en argument deux pointeurs sur des pointeurs sur des structures  FTSENT,  et  doit
       renvoyer  une  valeur négative, nulle, ou positive pour indiquer que le fichier représenté par le premier
       argument doit venir avant, à n'importe quel moment, ou après le fichier référencé par le second argument.
       Les champs fts_accpath, fts_path et fts_pathlen des structures FTSENT ne  doivent  jamais  être  utilisés
       dans cette comparaison. Si le champ fts_info contient FTS_NS ou FTS_NSOK, le membre fts_statp ne doit pas
       être utilisé non plus. Si l'argument compar() est NULL, l'ordre de traversée des répertoires est celui de
       l'argument path_argv pour les racines, et l'ordre interne des répertoires pour le reste.

   fts_read()
       La  fonction  fts_read()  renvoie  un  pointeur  sur  une  structure  FTSENT  décrivant  un fichier de la
       hiérarchie. Les répertoires lisibles et ne causant pas de boucles sont parcourus au moins deux fois,  une
       fois  en  phase  « preorder », et une en phase « postorder ». Les autres fichiers ne sont examinés qu'une
       seule fois. Les liens physiques entre répertoires qui ne causent pas de boucles, ou les liens symboliques
       vers des liens symboliques peuvent entraîner des fichiers visités plus d'une  fois,  ou  des  répertoires
       plus de deux fois.

       Si  tous  les  membres  de la hiérarchie ont été examinés, fts_read() renvoie NULL et définit la variable
       externe errno avec un 0. Si une erreur sans rapport avec un fichier particulier  se  produit,  fts_read()
       renvoie NULL et définit errno en conséquence. Si une erreur concernant le fichier en cours se produit, un
       pointeur sur une structure FTSENT est renvoyé, et errno peut ou non être défini (consultez fts_info).

       Les  structures FTSENT renvoyées par fts_read() peuvent être écrasées après un appel à fts_close() sur le
       même descripteur de hiérarchie ou après un appel à fts_read() sur  la  même  hiérarchie,  sauf  si  elles
       représentent un répertoire, auquel cas elles ne seront pas écrasées avant l'appel fts_read() renvoyant la
       structure FTSENT du répertoire en phase « postorder ».

   fts_children()
       La  fonction  fts_children()  renvoie  un  pointeur sur une structure FTSENT décrivant la première entrée
       d'une liste chaînée terminée par un NULL et représentant les fichiers  se  trouvant  dans  le  répertoire
       indiqué  par  la  dernière structure FTSENT renvoyée par un appel fts_read(). La liste est chaînée par le
       biais du membre fts_link de la structure FTSENT, et  est  ordonnée  suivant  la  routine  de  comparaison
       fournie  par  l'utilisateur,  si  elle  existe.  Des  appels répétés à fts_children() recréeront la liste
       chaînée.

       Un cas particulier se présente si fts_read() n'a pas encore  été  appelée  pour  une  hiérarchie.  Alors,
       fts_children()  renverra  un  pointeur  sur  les  fichiers du répertoire logique indiqué dans fts_open(),
       c'est-à-dire les arguments fournis à fts_open(). Sinon, si la structure FTSENT la plus récemment renvoyée
       par fts_read() n'est pas un répertoire visité en phase « preorder », ou  si  le  répertoire  ne  contient
       aucun  fichier,  fts_children()  renvoie  NULL  et met la variable externe errno à zéro. Si une erreur se
       produit, fts_children() renvoie NULL et définit errno en conséquence.

       Les  structures   FTSENT  renvoyées  par  fts_children()   peuvent  être  écrasées  après  un   appel   à
       fts_children(), fts_close() ou fts_read() sur la même hiérarchie de fichiers.

       Option peut contenir l'une des valeurs suivantes :

       FTS_NAMEONLY Seuls  les  noms  des fichiers sont nécessaires. Le contenu des membres des structures de la
                    liste chaînée est indéfini sauf pour fts_name et fts_namelen.

   fts_set()
       La fonction fts_set() permet à l'application de paramétrer le traitement à venir  du  fichier  f  sur  la
       hiérarchie  ftsp. La fonction fts_set() renvoie 0 si elle réussit, et -1 si une erreur se produit. Option
       doit contenir l'une des valeurs suivantes :

       FTS_AGAIN    Revisiter à nouveau le fichier. N'importe quel type de fichier peut être  revisité.  L'appel
                    suivant  de  fts_read()  renverra le fichier indiqué. Les membres fts_stat et fts_info de la
                    structure seront réinitialisés à ce moment, mais aucun autre champ ne  sera  modifié.  Cette
                    option  n'a  de  sens  que  pour  le  dernier  fichier renvoyé par fts_read(). L'utilisation
                    habituelle de cette possibilité concerne les répertoires en phase  « postorder »,  qui  sont
                    alors  réexaminés  (aussi  bien  en  phase  « preorder » que « postorder »), ainsi que leurs
                    descendants.

       FTS_FOLLOW   Le fichier référencé doit être un lien symbolique. Si ce fichier est le dernier renvoyé  par
                    fts_read(),  alors  l'appel  suivant  de  fts_read()  renverra  le  fichier, avec les champs
                    fts_info et fts_statp réinitialisés pour représenter la cible du lien symbolique plutôt  que
                    le lien lui-même. Si le fichier est le dernier renvoyé par fts_children(), alors les membres
                    fts_info   et   fts_statp  de  la  structure,  lorsqu'elle  sera  renvoyée  par  fts_read(),
                    représenteront la cible du lien symbolique plutôt que le lien lui-même. Dans tous  les  cas,
                    si  la  cible  du  lien  symbolique  n'existe pas, les membres de la structure ne seront pas
                    modifiés, et le champ fts_info contiendra FTS_SLNONE.

                    Si la cible du lien est un répertoire, il y aura un retour « preorder », suivi  d'un  retour
                    pour chaque descendant, suivi d'un retour « postorder ».

       FTS_SKIP     Aucun  descendant  de ce fichier ne sera visité. Le fichier doit être le dernier renvoyé par
                    fts_children() ou fts_read().

   fts_close()
       La fonction fts_close() ferme un descripteur ftsp de hiérarchie de fichier, et restitue le répertoire  de
       travail  qui  était  en  vigueur  lors  de l'appel fts_open() qui avait permit d'ouvrir ftsp. La fonction
       fts_close() renvoie 0 si elle réussit, et -1 en cas d'erreur.

ERREURS

       La fonction fts_open() peut échouer, et mettre dans errno l'une des erreurs indiquées pour les  fonctions
       open(2) et malloc(3).

       La fonction fts_close() peut échouer, et mettre dans errno l'une des erreurs indiquées pour les fonctions
       chdir(2) et close(2).

       Les  fonctions  fts_read()  et  fts_children()  peuvent  échouer,  et mettre dans errno l'une des erreurs
       indiquées pour les fonctions chdir(2), malloc(3), opendir(3), readdir(3) et stat(2).

       De plus fts_children(), fts_open() et fts_set() peuvent échouer, et mettre dans errno l'une  des  erreurs
       suivantes :

       EINVAL Les options ne sont pas valables.

VERSIONS

       Ces fonctions sont disponibles sous Linux depuis la glibc2.

CONFORMITÉ

       4.4BSD.

BOGUES

       Aucune  des  interfaces  de  programmation  décrites  dans  cette  page  de  manuel n’est sûre lors de la
       compilation d’un programme utilisant les  interfaces  de  programmation  LFS  (par  exemple  lors  de  la
       compilation avec -D_FILE_OFFSET_BITS=64).

VOIR AUSSI

       find(1), chdir(2), stat(2), ftw(3), qsort(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                                             18 mars 2014                                            FTS(3)