Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
FTS
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- FTS_OPEN
- FTS_READ
- FTS_CHILDREN
- FTS_SET
- FTS_CLOSE
- ERREURS
- VOIR AUSSI
- CONFORMITÉ À
- DISPONIBILITÉ
- TRADUCTION
16 avril 1994
NOM
fts
fts_open
fts_read
fts_children
fts_set
fts_close
- Traverser des hiérarchies de fichiers
SYNOPSIS
Fd #include <sys/types.h>
Fd #include <sys/stat.h>
Fd #include <fts.h>
Ft FTS *
Fn fts_open char * const *path_argv int options int (*compar)(const FTSENT **, const FTSENT **)
Ft FTSENT *
Fn fts_read FTS *ftsp
Ft FTSENT *
Fn fts_children FTS *ftsp int options
Ft int
Fn fts_set FTS *ftsp FTSENT *f int options
Ft int
Fn fts_close FTS *ftsp
DESCRIPTION
Les fonctions de la famille
fts
servent à traverser des hiérarchies
de fichiers
UNIX
Rapidement, disons que la fonction
Fn 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
Fn fts_read
renvoie un pointeur sur une structure décrivant l'un des
fichiers de l'arborescence. La fonction
Fn 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 « pre-order » avant d'avoir parcouru leurs descendants, et un passage en
ordre « post-order » 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 ignorant les liens symboliques) ou « physiquement » (en visitant les liens symboliques). 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
Aq Pa fts.h .
La première est
Fa FTS ,
une structure représentant
l'arborescence des fichiers elle-même, et la seconde est
Fa FTSENT ,
une
structure représentant un fichier dans la hiérarchie. Normalement, une
structure
Fa FTSENT
est renvoyée pour chaque fichier rencontré dans la
hiérarchie. Dans cette page de manuel, les termes « fichier » et
« structure
Fa FTSENT
» sont généralement interchangeables. La structure
Fa FTSENT
contient au moins les champs suivants, décrits en détail
ci-dessous :
typedef struct _ftsent {
u_short fts_info; /* drapeau 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 :
- Fa fts_info
-
L'un des attribut suivants, décrivant la structure
Fa 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 « pre-order ».
- FTS_DC
-
Un répertoire introduisant une boucle dans l'arborescence. Le champ
Fa fts_cycle
de la structure
Fa FTSENT
sera également remplis.
- FTS_DEFAULT
-
Toute structure
Fa FTSENT
représentant un type de fichier non décrit
explicitement par l'une des autres valeurs de
Fa fts_info .
- FTS_DNR
-
Un répertoire ne pouvant être lu. Ceci est considéré comme une erreur, et le
champ
Fa 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
Fn fts_open
(consultez
FTS_SEEDOT )
- FTS_DP
-
Un répertoire visité en phase « post-order ». Le contenu de la structure
Fa FTSENT
ne sera pas différent de ce qu'il était durant la phase « pre-order ». C'est-à-dire quand le champ
Fa fts_info
valait
FTS_D
- FTS_ERR
-
Il s'agit d'un retour d'erreur, le champ
Fa 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
Fa fts_statp
est indéfini. Il s'agit
d'un cas d'erreur dont la cause est indiquée dans
Fa fts_errno .
- FTS_NSOK
-
Un fichier pour lequel aucune information provenant de
stat(2)
n'a été
demandée. Le contenu du champ
Fa fts_statp
est indéfini.
- FTS_SL
-
Un lien symbolique.
- FTS_SLNONE
-
Un lien symbolique pointant dans le vide. Le contenu du champ
Fa fts_statp
contient les caractéristiques du lien lui-même.
- Fa fts_accpath
-
Un chemin permettant d'accéder au fichier depuis le répertoire courant.
- Fa 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
Fn fts_open .
- Fa fts_pathlen
-
La longueur de la chaîne pointée par
Fa fts_path .
- Fa fts_name
-
Le nom du fichier.
- Fa fts_namelen
-
La longueur de la chaîne pointée par
Fa fts_name .
- Fa fts_level
-
La profondeur où le fichier a été trouvé dans l'arborescence, numérotée de
-1 à N. La structure
Fa FTSENT
représentant le parent du point de départ
est numérotée -1. La structure
Fa FTSENT
représentant la racine de
départ elle-même est numérotée 0.
- Fa fts_errno
-
Dans une structure
Fa FTSENT
renvoyée par un appel
Fn fts_children
ou .
Fn fts_read ,
dont le champ
Fa fts_info
contient
FTS_DNR
FTS_ERR
ou
FTS_NS
le champ
Fa 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
Fa fts_errno
est
indéfini.
- Fa 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.
- Fa 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.
- Fa fts_parent
-
Un pointeur sur la structure
Fa 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
Fa fts_parent
pour le
point d'entrée initial est également fournie, mais seuls ses membres
Fa fts_level ,
Fa fts_number
et
Fa fts_pointer
sont garantis d'être
initialisés.
- Fa fts_link
-
Au retour de la fonction
Fn fts_children ,
le champ
Fa 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
Fa fts_link
est indéterminé.
- Fa fts_cycle
-
Si un répertoire introduit une boucle dans la hiérarchie (voyez
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
Fa fts_cycle
pointera vers la structure
Fa FTSENT
de la hiérarchie qui
référence le même fichier que celui représenté par la structure
Fa FTSENT .
Sinon, le contenu du champ
Fa fts_cycle
est indéfini.
- Fa 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
Fa fts_path
et
Fa fts_accpath
ne sont assurés d'être terminés par un caractère nul
seulement
pour le dernier fichier renvoyé par
Fn fts_read .
Pour
utiliser ces champs pour référencer un fichier représenté par une autre
structure
Fa FTSENT
nécessite que le chemin du tampon soit modifié avec
l'information contenu dans le champ
Fa fts_pathlen
de cette structure
Fa FTSENT .
Tout autre modification devra être défaite avant que d'autres
appels à
Fn fts_read
ne soient tentés. Le champ
Fa fts_name
est
toujours terminé par un caractère nul.
FTS_OPEN
La fonction
Fn 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 spécifié comme racine du parcours sera immédiatement
suivi (déréférencé), que l'option
FTS_LOGICAL
soit spécifiée ou non.
- FTS_LOGICAL
-
Renvoyer des structures
Fa 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
Fa FTSENT
est renvoyée
sont ceux pointant dans le vide. Il faut préciser soit
FTS_LOGICAL
soit
FTS_PHYSICAL
à la fonction
Fn 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 spécifiée et que des chemins d'accès absolus soit
transmis à
Fn fts_open .
- FTS_NOSTAT
-
Par défaut, les structures
Fa FTSENT
renvoyées contiennent les
caractéristiques (voir le champ
Fa statp )
de chaque fichier
visité. Cette option relâche cette contrainte pour optimiser les
performances, en autorisant les fonctions
fts
à remplir le champ
Fa fts_info
avec
FTS_NSOK
et laisser le contenu du membre
Fa statp
indéfini.
- FTS_PHYSICAL
-
Avec cette option, les routines
fts
renvoient des structures
Fa FTSENT
pour les liens symboliques eux-mêmes et non pas les fichiers qu'ils
pointent. Si cette option est définie, des structures
Fa 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
Fn fts_open .
- FTS_SEEDOT
-
Par défaut, à moins d'être fournis explicitement en argument à
Fn fts_open ,
tout fichier nommé
`.'
ou
`..'
rencontré dans la
hiérarchie est ignoré. Avec cette option, les routines
fts
renvoient
des structures
Fa 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
Fn compar
spécifie 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
Fa 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
Fa fts_accpath ,
Fa fts_path
et
Fa fts_pathlen
des
structures
Fa FTSENT
ne doivent
jamais
être utilisés dans cette
comparaison. Si le champ
Fa fts_info
contient
FTS_NS
ou
FTS_NSOK
le membre
Fa fts_statp
ne doit pas être utilisé non plus. Si
l'argument
Fn compar
est
NULL
l'ordre de traversée des
répertoires est celui de l'argument
Fa path_argv
pour les racines, et
l'ordre interne des répertoires pour le reste.
FTS_READ
La fonction
Fn fts_read
renvoie un pointeur sur une structure .
Fa 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 « pre-order », et une en phase « post-order ». 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,
Fn 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,
Fn 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
Fa FTSENT
est renvoyé, et
errno
peut ou non être défini
(voyez
Fa fts_info ) .
Les structures
Fa FTSENT
renvoyées par
Fn fts_read
peuvent être
écrasées après un appel à
Fn fts_close
sur le même descripteur de
hiérarchie ou après un appel à
Fn 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
Fn fts_read
renvoyant la structure
Fa FTSENT
du
répertoire en phase « post-order ».
FTS_CHILDREN
La fonction
Fn fts_children
renvoie un pointeur sur la structure
Fa 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
Fa FTSENT
renvoyée par un appel
Fn fts_read .
La liste est chaînée par le biais du membre
Fa fts_link
de la
structure
Fa FTSENT ,
et est ordonnée suivant la routine de comparaison
fournie par l'utilisateur, si elle existe. Des appels répétés à
Fn fts_children
recréeront la liste chaînée.
Un cas particulier se présente si
Fn fts_read
n'a pas encore été appelée
pour cette hiérarchie. Alors,
Fn fts_children
renverra un pointeur sur
les fichiers du répertoire logique transmis
Fn fts_open ,
c'est-à-dire
les arguments fournis à
Fn fts_open .
Sinon, si la structure
Fa FTSENT
la plus récemment renvoyée par
Fn fts_read
n'est pas un
répertoire visité en phase « pre-order », ou si le répertoire ne contient
aucun fichier,
Fn fts_children
renvoie
NULL
et met la variable
externe
errno
à zéro. Si une erreur se produit,
Fn fts_children
renvoie
NULL
et définit
errno
en conséquence.
Les structures
Fa FTSENT
renvoyées par
Fn fts_children
peuvent
être écrasées après un appel
Fn fts_children ,
Fn fts_close
ou
Fn 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
Fa fts_name
et
Fa fts_namelen .
FTS_SET
La fonction
Fn fts_set
permet à l'application de paramétrer le
traitement à venir du fichier
Fa f
sur la hiérarchie
Fa ftsp .
La
fonction
Fn 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
Fn fts_read
renverra le fichier
indiqué. Les membres
Fa fts_stat
et
Fa 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
Fn fts_read .
L'utilisation habituelle de cette possibilité concerne les
répertoires en phase « post-order », qui sont alors ré-examinés (aussi
bien en phase « pre-order » que « post-order »), ainsi que leurs
descendants.
- FTS_FOLLOW
-
Le fichier référencé doit être un lien symbolique. Si ce fichier est le
dernier renvoyé par
Fn fts_read ,
alors l'appel suivant de
Fn fts_read
renverra le fichier, avec les champs
Fa fts_info
et
Fa 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
Fn fts_children ,
alors les membres
Fa fts_info
et
Fa fts_statp
de la
structure, lorsqu'elle sera renvoyée par
Fn 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
Fa fts_info
contiendra
FTS_SLNONE
Si la cible du lien est un répertoire, il y aura un retour « pre-order »,
suivi d'un retour pour chaque descendant, suivi d'un retour « post-order ».
- FTS_SKIP
-
Aucun descendant de ce fichier ne sera visité. Le fichier doit être le
dernier renvoyé par
Fn fts_children
ou
Fn fts_read .
FTS_CLOSE
La fonction
Fn fts_close
ferme un descripteur
Fa ftsp
de hiérarchie
de fichier, et restitue le répertoire de travail qui était en vigueur lors
de l'appel
Fn fts_open
qui avait permit d'ouvrir
Fa ftsp .
La
fonction
Fn fts_close
renvoie 0 si elle réussit, et -1 en cas d'erreur.
ERREURS
La fonction
Fn fts_open
peut échouer, et mettre dans
errno
l'une
des erreurs indiquées pour les fonctions
open(2)
et
malloc(3).
La fonction
Fn fts_close
peut échouer, et mettre dans
errno
l'une
des erreurs indiquées pour les fonctions
chdir(2)
et
close(2).
Les fonctions
Fn fts_read
et
Fn 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
Fn fts_children ,
Fn fts_open
et
Fn fts_set
peuvent
échouer, et mettre dans
errno
l'une des erreurs suivantes :
- Bq Er EINVAL
-
Les options ne sont pas valables.
VOIR AUSSI
find(1),
chdir(2),
stat(2),
ftw(3),
qsort(3)
CONFORMITÉ À
BSD 4.4. La famille de fonctions
fts
sera peut être incluse dans une
future mise à jour de
St -p1003.1-88 .
DISPONIBILITÉ
Ces fonctions sont disponibles sous Linux depuis la glibc2.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction 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> ».
|