Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

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 instr);

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

       int fts_close(FTS *ftsp);

DESCRIPTION

       Les fonctions de la famille fts servent à traverser des hiérarchies  de  fichiers.  Disons
       rapidement que la fonction fts_open() renvoie un descripteur (« handler » — de type FTS *)
       qui fait référence à un « flux » de hiérarchie de fichiers.  Ce  descripteur  est  ensuite
       fourni  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 un 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 (et les types associés) sont définies dans le fichier include <fts.h>.  Le
       premier type est FTS, une structure représentant l'arborescence des fichiers elle-même. Le
       second est FTSENT, la 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  les  champs décrivant un ficher. La structure contient au
       moins les champs suivants (il y a des champs supplémentaires qui doivent  être  considérés
       comme réservés à l'implémentation).

           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) +
                                                strlen(fts_name) */
               char          *fts_name;     /* nom 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;    /* structure de boucle */
               struct stat   *fts_statp;    /* information [l]stat(2) */
           } FTSENT;

       Les membres ont les significations suivantes :

       fts_info
              L'un  des  attributs suivants, décrivant la structure FTSENT renvoyée et le fichier
              qu'elle représente. À l'exception des répertoires FTS_D ne présentant pas d'erreur,
              toutes  ces  entrées  sont  terminales, ce qui signifie qu'elles ne seront visitées
              qu'une seule fois et que leur éventuels descendants (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 rempli.

              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 pour indiquer la cause de l'erreur.

              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  [l]stat(2)  n'est
                     disponible.  Le  contenu du champ fts_statp est indéfini. Il s'agit d'un cas
                     d'erreur et le champ  fts_errno  sera  défini  pour  indiquer  la  cause  de
                     l'erreur.

              FTS_NSOK
                     Un  fichier  pour  lequel aucune information provenant de [l]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 informations caractéristiques de fichier 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 somme des longueurs des chaînes pointées par fts_path et fts_name.

       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 (ou racine) 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  le
              numéro  d'erreur (c'est-à-dire, la valeur de 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 initialisé à 0.

       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épertoire, 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 [l]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 NULL 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 tampon du chemin soit modifié avec l'information  contenue  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 NULL.

   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, soit FTS_PHYSICAL). Les options sont sélectionnées par un  ou  logique  entre
       les valeurs suivantes :

       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 des fichiers qui n'existent pas : le champ fts_statp  est  obtenu  au
              moyen de stat(2) avec un repli vers lstat(2).

       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 :  le  champ  fts_statp  est  obtenu  au  moyen  de
              lstat(2).

       FTS_COMFOLLOW
              Tout  lien  symbolique  indiqué  comme racine du parcours sera immédiatement suivi,
              comme au moyen de FTS_LOGICAL, indépendamment du mode primaire.

       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.  Cette  option
              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êmes  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 fts_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 fts_statp indéfini.

       FTS_SEEDOT
              Par défaut, à moins d'être fourni 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, zéro 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 fois 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 pour indiquer l'erreur.
       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 flux de hiérarchie de fichiers ou après un appel à fts_read()  sur
       la  même flux de 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é à 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 pour indiquer l'erreur.

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

       L'argument flags est soit zéro, soit la valeur suivante :

       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 l'utilisateur de paramétrer le  traitement
       à  venir du fichier f du flux ftsp. La fonction fts_set() renvoie 0 si elle réussit, et -1
       si une erreur se produit.

       L'argument instr est un 0 (signifiant « ne rien faire ») ou 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 des derniers
              renvoyés 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 peut être un de ceux
              renvoyés le plus récemment par fts_children() ou fts_read().

   fts_close()
       La fonction fts_close() ferme le flux de hiérarchie de fichiers auquel ftsp fait référence
       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
       [l]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 ou les instr ne sont pas valables.

VERSIONS

       Ces fonctions sont disponibles sous Linux depuis la glibc2.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌──────────────────────────────────────────────────────┬──────────────────────┬───────────┐
       │InterfaceAttributValeur    │
       ├──────────────────────────────────────────────────────┼──────────────────────┼───────────┤
       │fts_open(), fts_set(), fts_close()                    │ Sécurité des threads │ MT-Safe   │
       ├──────────────────────────────────────────────────────┼──────────────────────┼───────────┤
       │fts_read(), fts_children()                            │ Sécurité des threads │ MT-Unsafe │
       └──────────────────────────────────────────────────────┴──────────────────────┴───────────┘

STANDARDS

       4.4BSD.

BOGUES

       Avant la glibc 2.23, 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), lstat(2), stat(2), ftw(3), qsort(3)

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot  <david@tilapin.org>  et  Jean-Pierre Giraud
       <jean-pierregiraud@neuf.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.