fts, fts_open, fts_read, fts_children, fts_set, fts_close
Parcourir une hiérarchie de fichiers
- Provided by: manpages-fr-dev (Version: 3.65d1p1-1)
- Source: manpages-fr
- Report a bug
Parcourir une hiérarchie de fichiers
#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);
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 :
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.
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 :
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.
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 ».
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 :
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 :
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.
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 :
Ces fonctions sont disponibles sous Linux depuis la glibc2.
4.4BSD.
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).
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/.
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> ».