Man page - ftw(3)

Packages contains this manual

Available languages:

en fr ja ru

Manual

ftw

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
ftw()
VALEUR RENVOYÉE
ATTRIBUTS
VERSIONS
STANDARDS
HISTORIQUE
NOTES
BOGUES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

NOM

ftw, nftw - Parcourir des arborescences de fichiers

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <ftw.h>

int nftw(const char * chemin_répertoire ,
int (*
fn )(const char * chemin_fichier , const struct stat * sb ,
int
symb_type , struct FTW * tampon_ftw ),
int
nb_descripteurs_fichier_ouverts , int drapeaux );

[[deprecated]]
int ftw(const char *
chemin_répertoire ,
int (*
fn ) (const char * chemin_fichier , const struct stat * sb ,
int
symb_type ),
int
nb_descripteurs_fichier_ouverts );

Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros (7)) :

nftw () :
_XOPEN_SOURCE >= 500

DESCRIPTION

La fonction nftw () parcourt l’arborescence de fichiers situĂ©e dans le rĂ©pertoire chemin_rĂ©pertoire et appelle fn () une fois pour chaque entrĂ©e de l’arborescence. Par dĂ©faut, les rĂ©pertoires sont traitĂ©s avant les fichiers et sous-rĂ©pertoires qu’ils contiennent (mĂ©thode de parcours « preorder »).

Afin d’éviter d’utiliser tous les descripteurs de fichier du processus appelant, nb_descripteurs_fichier_ouverts indique le nombre maximal de rĂ©pertoires que nftw () peut ouvrir simultanĂ©ment. Lorsque la profondeur de recherche est supĂ©rieure Ă  cette valeur, nftw () ralentit car les rĂ©pertoires doivent ĂȘtre fermĂ©s puis rĂ©ouverts. nftw () utilise au plus un descripteur de fichier pour chaque niveau dans l’arborescence des fichiers.

Pour chaque entrĂ©e trouvĂ©e dans l’arbre, nftw () appelle fn () avec quatre arguments : chemin_fichier , sb , symb_type et tampon_ftw . chemin_fichier est le chemin de l’entrĂ©e ; il est dĂ©fini comme un chemin relatif au rĂ©pertoire de travail actuel du processus appelant au moment de l’appel Ă  nftw () si chemin_rĂ©pertoire est un chemin relatif, ou comme un chemin absolu si chemin_rĂ©pertoire est un chemin absolu. sb est un pointeur vers la structure stat renvoyĂ©e par un appel Ă  stat (2) pour chemin_fichier .

L’argument symb_type passĂ© Ă  fn () est un entier qui peut prendre une des valeurs suivantes :

FTW_F

chemin_fichier est un fichier ordinaire.

FTW_D

chemin_fichier est un répertoire.

FTW_DNR

chemin_fichier est un rĂ©pertoire qui ne peut ĂȘtre lu.

FTW_DP

chemin_fichier est un rĂ©pertoire et FTW_DEPTH a Ă©tĂ© dĂ©fini dans drapeaux (si FTW_DEPTH n’est pas dĂ©fini dans drapeaux , alors les rĂ©pertoires seront toujours visitĂ©s avec symb_type dĂ©fini Ă  FTW_D ). Tous les fichiers et sous-rĂ©pertoires dans chemin_fichier ont Ă©tĂ© traitĂ©s.

FTW_NS

L’appel stat (2) a Ă©chouĂ© sur chemin_fichier qui n’est pas un lien symbolique. Cela est probablement dĂ» au fait que l’appelant avait les droits de lecture sur le rĂ©pertoire parent de telle sorte que chemin_fichier Ă©tait visible, mais n’avait pas les droits d’exĂ©cution, et donc le fichier ne pouvait pas ĂȘtre atteint pour stat (2). Le contenu du tampon pointĂ© par sb est indĂ©terminĂ©.

FTW_SL

chemin_fichier est un lien symbolique et FTW_PHYS a été défini dans drapeaux .

FTW_SLN

chemin_fichier est un lien symbolique pointant vers un fichier qui n’existe pas (ce qui ne se produira que si FTW_PHYS n’est pas dĂ©fini). Dans ce cas, l’argument sb passĂ© Ă  fn () contiendra les informations renvoyĂ©es par l’exĂ©cution de lstat (2) sur le lien symbolique pointant nulle part (voir Ă  ce sujet BOGUES).

Le quatriĂšme argument ( tampon_ftw ), spĂ©cifiĂ© par nftw () lors de l’appel de fn , est un pointeur vers une structure du type FTW :

struct FTW {
int base;
int level;
};

base est le dĂ©calage du nom de fichier (c’est-Ă -dire le composant « basename ») du chemin donnĂ© par chemin_fichier . level est la profondeur de chemin_fichier dans l’arbre des rĂ©pertoires, relative Ă  la racine de l’arbre ( chemin_rĂ©pertoire qui a une profondeur de 0 ).

Pour arrĂȘter le parcours de l’arborescence des fichiers, la fonction fn () renvoie une valeur diffĂ©rente de 0 , qui deviendra la valeur de retour de nftw (). Tant que fn () renvoie 0 , nftw () continuera jusqu’à la fin du parcours de l’arborescence, et dans ce cas renverra 0 , ou jusqu’à ce qu’une erreur se produise (comme un Ă©chec de malloc (3)) et dans ce cas renverra -1 .

Comme nftw () utilise des structures de donnĂ©es allouĂ©es dynamiquement, la seule maniĂšre propre de sortir d’un parcours d’arborescence consiste Ă  faire que fn () renvoie une valeur diffĂ©rente de 0 . Pour permettre Ă  un signal de terminer le parcours sans causer de fuite de mĂ©moire, utilisez un gestionnaire qui dĂ©finit un attribut global vĂ©rifiĂ© par fn (). N’utilisez pas longjmp (3) Ă  moins que le programme ne soit sur le point de se terminer.

L’argument drapeaux de nftw () est un OU binaire entre zĂ©ro ou plusieurs des attributs suivants :
FTW_ACTIONRETVAL
(depuis la glibc 2.3.3)

Si cet attribut, spĂ©cifique Ă  la glibc, est positionnĂ©, alors nftw () gĂšre la valeur de retour de fn () diffĂ©remment. fn () doit renvoyer l’une des valeurs suivantes :
FTW_CONTINUE

nftw () doit continuer normalement.

FTW_SKIP_SIBLINGS

Si fn () renvoie cette valeur, alors les entrĂ©es de mĂȘme niveau que l’entrĂ©e courante seront sautĂ©es, et la procĂ©dure continuera avec le parent.

FTW_SKIP_SUBTREE

Si fn () est appelĂ©e avec une entrĂ©e qui est un rĂ©pertoire ( symb_type a pour valeur FTW_D ), cette valeur de retour empĂȘchera le passage des objets de ce rĂ©pertoire comme arguments Ă  fn () et nftw () continuera avec l’entrĂ©e suivante de mĂȘme niveau du rĂ©pertoire.

FTW_STOP

nftw () doit quitter immédiatement avec la valeur de retour FTW_STOP .

D’autres valeurs de retour pourront ĂȘtre associĂ©es Ă  de nouvelles actions dans le futur ; fn ne devrait renvoyer que les valeurs citĂ©es ci-dessus.

La macro de test _GNU_SOURCE doit ĂȘtre dĂ©finie (avant toute inclusion de fichiers d’en-tĂȘte) afin d’obtenir la dĂ©finition de FTW_ACTIONRETVAL depuis <ftw.h> .

FTW_CHDIR

Si cet attribut est dĂ©fini, faire un chdir (2) vers chaque rĂ©pertoire avant de traiter son contenu. Cela est utile si le programme doit exĂ©cuter des actions dans le rĂ©pertoire oĂč chemin_fichier rĂ©side (prĂ©ciser ce drapeau n’a aucun effet sur le nom de chemin passĂ© dans l’argument de chemin_fichier de fn ).

FTW_DEPTH

Si cet attribut est dĂ©fini, faire une recherche « postorder » ; c’est-Ă -dire, appeler fn () pour le rĂ©pertoire lui-mĂȘme aprĂšs avoir traitĂ© son contenu et celui de ses sous-rĂ©pertoires (par dĂ©faut chaque rĂ©pertoire est traitĂ© avant son contenu).

FTW_MOUNT

Si cet attribut est dĂ©fini, rester dans le mĂȘme systĂšme de fichiers (c’est-Ă -dire, ne pas traverser vers d’autres points de montage).

FTW_PHYS

Si cet attribut est dĂ©fini, ne pas suivre les liens symboliques (c’est ce que l’on veut). S’il n’est pas dĂ©fini, les liens symboliques sont suivis, mais aucun fichier n’est traitĂ© plus d’une fois.

Si FTW_PHYS n’est pas dĂ©fini, mais si FTW_DEPTH l’est, alors la fonction fn () n’est jamais appelĂ©e pour un rĂ©pertoire qui ferait partie de ses propres descendants.

ftw()

ftw () est une fonction plus ancienne qui prend en charge un sous-ensemble des fonctionnalités de nftw (). Les différences notables sont les suivantes :

-

ftw () n’a pas d’argument drapeaux . Elle se comporte comme nftw () lorsque cette derniĂšre est appelĂ©e avec l’argument drapeaux dĂ©fini Ă  zĂ©ro.

-

La fonction de rappel fn () est fournie sans le quatriĂšme argument.

-

Le jeu de valeurs passĂ©es Ă  l’aide de l’argument symb_type Ă  fn () est plus petit : les seules valeurs valables sont FTW_F , FTW_D , FTW_DNR , FTW_NS et (peut-ĂȘtre) FTW_SL .

VALEUR RENVOYÉE

Ces fonctions renvoient 0 en cas de succùs et -1 en cas d’erreur.

Si fn () renvoie une valeur diffĂ©rente de 0 , alors le parcours de l’arbre se termine et la valeur renvoyĂ©e par fn () est renvoyĂ©e comme rĂ©sultat de ftw () ou nftw ().

Si nftw () est appelĂ©e avec l’attribut FTW_ACTIONRETVAL , alors la seule valeur diffĂ©rente de 0 qui pourra ĂȘtre utilisĂ©e par fn () pour terminer le parcours de l’arbre est FTW_STOP , et cette valeur est renvoyĂ©e comme rĂ©sultat de nftw ().

ATTRIBUTS

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

Image grohtml-3894900-1.png

VERSIONS

Dans certaines implĂ©mentations (par exemple la glibc), ftw () n’utilise jamais FTW_SL ; sur d’autres systĂšmes, FTW_SL n’apparaĂźt que pour les liens symboliques qui ne pointent vers aucun fichier existant ; sur d’autres encore, ftw () utilise FTW_SL pour chaque lien symbolique. Si chemin_fichier est un lien symbolique et si stat (2) Ă©choue, POSIX.1-2008 indique que le rĂ©sultat est indĂ©fini si FTW_NS ou FTW_SL sont dĂ©finis dans symbole_type . Pour un fonctionnement prĂ©visible, employez nftw ().

STANDARDS

POSIX.1-2008.

HISTORIQUE

ftw ()

POSIX.1-2001, SVr4, SVr4, SUSv1. POSIX.1-2008 marque la fonction comme étant obsolÚte.

nftw ()

glibc 2.1. POSIX.1-2001, SUSv1.

FTW_SL

POSIX.1-2001, SUSv1.

NOTES

POSIX.1-2008 indique que les résultats sont imprévisibles si fn ne préserve pas le répertoire de travail actuel.

BOGUES

Selon POSIX.1-2008, lorsque l’argument symb_type passĂ© Ă  fn () contient FTW_SLN , le tampon pointĂ© par sb doit contenir des informations Ă  propos du lien symbolique pointant nulle part (obtenues en appelant lstat (2) sur le lien), et les premiĂšres versions de la glibc respectaient la spĂ©cification POSIX sur ce point. Cependant, suite Ă  une rĂ©gression introduite dans la version 2.4 de la glibc, le contenu du tampon pointĂ© par sb devint indĂ©fini lorsque FTW_SLN Ă©tait dĂ©fini dans symb_type (plus prĂ©cisĂ©ment, le contenu du tampon restait inchangĂ© dans ce cas). Cette rĂ©gression fut finalement corrigĂ©e dans la version 2.30 de la glibc de façon Ă  ce que l’implĂ©mentation de la glibc suive Ă  nouveau la spĂ©cification POSIX.

EXEMPLES

Le programme suivant parcourt l’arbre des rĂ©pertoires du chemin donnĂ© en premier argument de la ligne de commande ou du rĂ©pertoire courant s’il n’est pas indiquĂ©. Il affiche diverses informations Ă  propos de chaque fichier. Le second argument de la ligne de commande peut ĂȘtre utilisĂ© pour indiquer les caractĂšres qui contrĂŽlent la valeur assignĂ©e Ă  l’argument drapeaux lors des appels Ă  nftw ().

Source du programme

#define _XOPEN_SOURCE 500
#include <ftw.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int
display_info(const char *fpath, const struct stat *sb,
int tflag, struct FTW *ftwbuf)
{
printf("%-3s %2d ",
(symb_type == FTW_D) ? "d" : (symb_type == FTW_DNR) ? "dnr" :
(symb_type == FTW_DP) ? "dp" : (symb_type == FTW_F) ? "f" :
(symb_type == FTW_NS) ? "ns" : (symb_type == FTW_SL) ? "sl" :
(symb_type == FTW_SLN) ? "sln" : "???",
tampon_ftw->level);
if (tflag == FTW_NS)
printf("-------");
else
printf("%7jd", (intmax_t) sb->st_size);
printf(" %-40s %d %s\n",
chemin_fichier, tampon_ftw->base, chemin_fichier + tampon_ftw->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

stat (2), fts (3), readdir (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 Lucien Gentis <lucien.gentis@waika9.com>

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 .