ftw | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
#include <ftw.h> int ftw(const char *dirpath, int (*fn) (const char *fpath, const struct stat *sb, int typeflag), int nopenfd); #define _XOPEN_SOURCE 500 #include <ftw.h> int nftw(const char *dirpath, int (*fn) (const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf), int nopenfd, int flags);
DESCRIPTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Pour éviter d'utiliser tous les descripteurs de fichiers du processus appelant, nopenfd spécifie le nombre maximum de répertoires que ftw() peut ouvrir de manière simultanée. Lorsque la profondeur de recherche excède cette valeur, ftw() devient plus lente à cause des répertoires qu'il faut fermer et réouvrir. ftw() utilise au plus un descripteur de fichiers pour chaque niveau de l'arborescence du répertoire.
Pour chaque entrée trouvée dans l'arborescence, ftw() appelle fn() avec trois arguments : fpath, sb et typeflag. fpath est le chemin de l'entrée relativement à dirpath. sb est un pointeur sur la structure stat renvoyée par un appel à stat(2) pour fpath. typeflag est un entier qui a une des valeurs suivantes :
Si fpath est un lien symbolique et que stat(2) échoue, POSIX.1-2001 déclare qu'il est indéfini si FTW_NS ou FTW_SL (voir plus loin) est passé dans typeflag.
Pour arrêter le parcours des fichiers, la fonction fn() peut renvoyer une valeur non-nulle, qui deviendra la valeur de retour de ftw(). Tant que fn() renvoie 0, ftw() continuera jusqu'à atteindre la fin du parcours de l'arbre, et renverra zéro, ou jusqu'à ce que se produise une erreur comme celles de malloc(3) et renverra -1.
Comme ftw() utilise des structures de données allouées dynamiquement, la seule manière propre de sortir d'un parcours est que fn() renvoie une valeur non nulle. Pour permettre à un signal de terminer le parcours sans provoquer de fuite mémoire, le gestionnaire doit positionner un drapeau global qui sera vérifié par fn(). N'utilisez jamais longjmp(3) à moins que le programme ne soit prêt à se terminer.
nftw() | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
D'autres valeurs de retour pourron être associées, dans le futur, à de nouvelles actions ; fn() ne devrait pas renvoyer d'autres valeurs que celles citées précédemment.
La macro de test de fonctionnalité _GNU_SOURCE doit être définie afin d'obtenir la définition de FTW_ACTIONRETVAL dans <ftw.h>.
Si FTW_PHY n'est pas demandé, mais si FTW_DEPTH l'est, la fonction fn() n'est jamais appelée sur un répertoire que l'on retrouve dans ses descendants.
Pour chaque entrée de l'arborescence du répertoire nftw() appelle fn() avec quatre arguments. fpath et sb sont comme pour ftw(). typeflag peut prendre les mêmes valeurs que ftw(), ou l'une des valeurs suivantes :
Le quatrième argument que nftw() fournit lors de l'appel à fn() est une structure de type FTW :
struct FTW { int base; int level; };base est le décalage du nom de fichier (c'est-à-dire, la partie nom de base) dans le chemin fourni dans fpath. level est la profondeur de fpath dans l'arborescence du répertoire, relative à la racine de l'arbre (dirpath, qui a une profondeur nulle).
VALEUR RENVOYÉE | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Si fn() renvoie une valeur non nulle, le parcours de l'arbre est terminé et la valeur renvoyée par fn() est renvoyée comme le résultat de ftw() ou nftw().
Si nftw() est appelée avec l'attribut FTW_ACTIONRETVAL, la seule valeur non nulle qui puisse être utilisée par fn() pour terminer le parcours de l'arbre est FTW_STOP, et cette valeur est renvoyée comme le résultat de nftw().
CONFORMITÉ | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
NOTES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Sur certains systèmes, ftw() n'utilise jamais FTW_SL, sur d'autres, FTW_SL ne se présente que pour les liens symboliques pointant dans le vide, sur d'autres encore, ftw() utilisera FTW_SL pour chaque lien symbolique. Pour un fonctionnement prévisible, employez nftw().
Sous Linux, les libc4, libc5 et glibc 2.0.6 utilisent FTW_F pour tous les objets (fichiers, liens symboliques, fifos, etc.) ne permettant pas un stat(2), mais autres que les répertoires.
La fonction nftw() est disponible depuis la glibc 2.1.
EXEMPLE | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
#define _XOPEN_SOURCE 500 #include <ftw.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> static int display_info(const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf) { printf("%-3s %2d %7jd %-40s %d %s\n", (tflag == FTW_D) ? "d" : (tflag == FTW_DNR) ? "dnr" : (tflag == FTW_DP) ? "dp" : (tflag == FTW_F) ? "f" : (tflag == FTW_DP) ? "ns" : (tflag == FTW_SL) ? "sl" : (tflag == FTW_SLN) ? "sln" : "???", ftwbuf->level, (intmax_t) sb->st_size, fpath, ftwbuf->base, fpath + ftwbuf->base); return 0; /* Pour dire à nftw() de continuer */ } int main(int argc, char *argv[]) { int flags = 0; if (argc > 2 && strchr(argv[2], 'd') != NULL) flags |= FTW_DEPTH; if (argc > 2 && strchr(argv[2], 'p') != NULL) flags |= FTW_PHYS; if (nftw((argc < 2) ? "." : argv[1], display_info, 20, flags) == -1) { perror("nftw"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 26 octobre 1996 et révisée le 6 juin 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 ftw ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
Table des mots clés | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
FTW_ACTIONRETVAL (depuis la glibc 2.3.3) | nftw() |
FTW_CHDIR | nftw() |
FTW_D | DESCRIPTION |
FTW_DEPTH | nftw() |
FTW_DNR | DESCRIPTION |
FTW_DP | nftw() |
FTW_F | DESCRIPTION |
FTW_MOUNT | nftw() |
FTW_NS | DESCRIPTION |
FTW_PHYS | nftw() |
FTW_SL | nftw() |
FTW_SLN | nftw() |