Man page - fts(3)

Packages contains this manual

Available languages:

en fr ja ru

Manual

fts

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
fts_open()
fts_read()
fts_children()
fts_set()
fts_close()
ERREURS
ATTRIBUTS
STANDARDS
HISTORIQUE
BOGUES
VOIR AUSSI
TRADUCTION

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 (*_Nullable
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).

De plus, fts_open () peut Ă©chouer et mettre dans errno l’une des erreurs suivantes :

ENOENT

Un élément de path_argv était une chaßne vide.

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.

ATTRIBUTS

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

Image grohtml-3869558-1.png

STANDARDS

Aucune.

HISTORIQUE

glibc 2. 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 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 .