Votre IP: 38.107.179.241 
  
 
Google
 
Accueil e-mail Linux
Linux
Perl
Perl
C
Langage C
Dico
Dictionnaire
Biblio liens
Bibliothèque de liens
Index articles
Index articles
 

Date création : 27-03-2008 20:23:44

Linux  Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]


FTS

 

Index

  1. NOM
  2. SYNOPSIS
  3. DESCRIPTION
  4. FTS_OPEN
  5. FTS_READ
  6. FTS_CHILDREN
  7. FTS_SET
  8. FTS_CLOSE
  9. ERREURS
  10. VOIR AUSSI
  11. CONFORMITÉ À
  12. DISPONIBILITÉ
  13. TRADUCTION

16 avril 1994  

NOMIndex

fts fts_open fts_read fts_children fts_set fts_close - Traverser des hiérarchies de fichiers  

SYNOPSISIndex

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  

DESCRIPTIONIndex

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_OPENIndex

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_READIndex

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_CHILDRENIndex

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_SETIndex

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_CLOSEIndex

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.  

ERREURSIndex

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 AUSSIIndex

find(1), chdir(2), stat(2), ftw(3), qsort(3)  

CONFORMITÉ ÀIndex

BSD 4.4. La famille de fonctions fts sera peut être incluse dans une future mise à jour de St -p1003.1-88 .  

DISPONIBILITÉIndex

Ces fonctions sont disponibles sous Linux depuis la glibc2.  

TRADUCTIONIndex

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


Création : octobre 2007  © Tous droits réservés 2007 linux-perl-c
Valid HTML 4.01 TransitionalValid CSS