NOM
glob, globfree - Rechercher un chemin d’accès correspondant à un motif.
SYNOPSIS
#include <glob.h>
int glob(const char *pattern, int flags,
int (*errfunc) (const char *epath, int eerrno),
glob_t *pglob);
void globfree(glob_t *pglob);
La fonction glob() recherche tous les chemins d’accès correspondant au
motif pattern en utilisant les règles du shell (voir glob(7)). Aucun
remplacement de tilde ou substitution de paramètre n’est effectué. Si
vous avez besoin de ces fonctionnalités, voyez wordexp(3).
La fonction globfree() libère la mémoire allouée dynamiquement lors
d’un appel précédent à glob().
Les résultats d’un appel à glob() sont stockés dans une structure
pointée par pglob. Cette structure est de type glob_t (défini dans
<glob.h>) et inclut les éléments définis par POSIX.2 (il peut y en
avoir plus sous forme d’extension GNU) :
typedef struct {
size_t gl_pathc; /* Nombre de chemins correspondant */
char **gl_pathv; /* Liste des chemins correspondant */
size_t gl_offs; /* Entrées à réserver dans gl_pathv. */
} glob_t;
Les résultats sont sauvés dans une zone allouée dynamiquement.
Le paramètre flags est constitué d’un OU binaire « | » entre zéro ou
plus des constantes symboliques suivantes, modifiant le comportement de
glob() :
GLOB_ERR
Terminer dès qu’une erreur se produit (par exemple, un
répertoire non lisible). Par défaut, glob() tente, malgré les
erreurs, de lire tous les répertoires qu’il peut.
GLOB_MARK
Ajoute une barre oblique finale à chaque nom correspondant à un
répertoire.
GLOB_NOSORT
Ne pas trier les chemins d’accès renvoyés. La seule raison pour
faire cela est d’économiser du temps de traitement. Par défaut,
les chemins d’accès renvoyés sont triés.
GLOB_DOOFFS
Réserve pglob->gl_offs points d’entrée au début de la liste de
chaînes dans pglob->pathv. Les points d’entrée réservés
contiennent des pointeurs NULL.
GLOB_NOCHECK
Si aucun motif ne correspond, renvoyer le motif original. Par
défaut, glob() renvoie GLOB_NOMATCH s’il n’y a pas de
correspondance.
GLOB_APPEND
Ajoute les résultats de cet appel au tableau de résultats
renvoyé par un appel précédent à glob(). Ne pas indiquer cet
attribut lors du premier appel de glob().
GLOB_NOESCAPE
Ne pas permettre l’utilisation des barres contre oblique (« \ »)
pour désactiver les caractères d’échappement. Normalement, une
contre oblique peut être utilisée pour échapper le caractère qui
le suit, fournissant un mécanisme de désactivation du sens
particulier des méta-caractères.
flags peut également utiliser les constantes suivantes, qui sont des
extensions GNU, non définies dans POSIX.2 :
GLOB_PERIOD
Permettre à un point en tête de chemin de correspondre à un
méta-caractère. Par défaut, les méta-caractères ne peuvent pas
correspondre à un point en tête de chemin.
GLOB_ALTDIRFUNC
Utiliser les fonctions alternatives pglob->gl_closedir,
pglob->gl_readdir, pglob->gl_opendir, pglob->gl_lstat et
pglob->gl_stat pour l’accès au système de fichiers au lieu des
fonctions normales de bibliothèque.
GLOB_BRACE
Développer dans le style csh(1) les expressions de type {a,b}.
Les expressions entre accolades peuvent être imbriquées. Ainsi,
par exemple, spécifier le motif « {foo/{,cat,dog},bar} »
retournera le même résultat que quatre appels à glob() séparés
utilisant les chaînes : « foo/ », « foo/cat », « foo/dog », et
« bar ».
GLOB_NOMAGIC
Si le motif renvoyé ne contient pas de méta-caractères, il sera
retourné comme seul mot correspondant, même s’il n’existe pas de
fichier avec ce nom.
GLOB_TILDE
Prendre en charge l’expansion du tilde. Si un tilde (« ~ ») est
le seul caractère du motif, ou si un tilde en tête est suivi par
une barre oblique (« / »), le répertoire personnel de l’appelant
sera substitué au tilde. Si un tilde en tête est suivi par un
nom d’utilisateur (par exemple, « ~alain/bin », le tilde et le
nom d’utilisateur sont substitués par le répertoire personnel de
cet utilisateur. Si le nom d’utilisateur n’est pas valide ou si
le répertoire personnel ne peut pas être déterminé, la
substitution n’est pas effectuée.
GLOB_TILDE_CHECK
Fournit un comportement similaire à celui de GLOB_TILDE. La
différence est que si le nom d’utilisateur n’est pas valable ou
si le répertoire personnel ne peut pas être déterminé, plutôt
que d’utiliser le motif lui-même comme nom, glob() renvoie
GLOB_NOMATCH pour indiquer l’erreur.
GLOB_ONLYDIR
C’est une indication pour glob() indiquant que l’appelant ne
s’intéresse qu’aux répertoires correspondant au motif. Si
l’implémentation peut facilement déterminer le type de fichier,
les fichiers qui ne sont pas des répertoires ne sont pas
renvoyés à l’appelant. Toutefois, l’appelant doit toujours
vérifier que les fichiers renvoyés sont des répertoires. (Le but
de cet attribut est simplement d’optimiser les performances
lorsque l’appelant ne s’intéresse qu’aux répertoires.)
Si errfunc n’est pas NULL, elle sera appelée en cas d’erreur, avec les
arguments epath un pointeur sur le chemin qui a échoué, et eerrno la
valeur de errno telle qu’elle a été renvoyée par un appel à opendir(3),
readdir(3) ou stat(2). Si errfunc renvoie une valeur non nulle, ou si
GLOB_ERR est positionné, glob() se terminera après l’appel de errfunc.
Si glob() réussit complètement, pglob->gl_pathc contient le nombre de
chemins d’accès correspondants et pglob->gl_pathv contient un pointeur
sur une liste des chemins. Le premier pointeur après le dernier chemin
vaut NULL.
Il est possible d’appeler glob() plusieurs fois. Dans ce cas,
l’attribut GLOB_APPEND doit être indiqué dans flags durant le second
appel et les suivants.
En tant qu’extension GNU, le champ pglob->gl_flags contient les
attributs indiqués liés par un OU avec GLOB_MAGCHAR si un
méta-caractère a été trouvé.
VALEUR RENVOYÉE
S’il réussit complètement glob() renvoie zéro. Les autres valeurs
renvoyées peuvent être :
GLOB_NOSPACE
pas assez de mémoire,
GLOB_ABORTED
erreur de lecture,
GLOB_NOMATCH
aucune correspondance trouvée.
CONFORMITÉ
POSIX.2, POSIX.1-2001.
NOTES
Les membres gl_pathc et gl_offs de la structure glob_t sont des size_t
dans glibc 2.1, comme indiqué dans POSIX.2, mais sont déclarés sous
forme de int dans libc4, libc5 et glibc 2.0.
BOGUES
La fonction glob() peut échouer en cas d’erreur dans un appel de
fonction sous-jacent, comme malloc(3) ou opendir(3). Le code d’erreur
sera alors stocké dans errno.
EXEMPLE
L’exemple d’utilisation suivant simule la frappe de
ls -l *.c ../*.c
dans un shell :
glob_t globbuf;
globbuf.gl_offs = 2;
glob("*.c", GLOB_DOOFS, NULL, &globbuf);
glob("../*.c", GLOB_DOOFS | GLOB_APPEND, NULL, &globbuf);
globbuf.gl_pathv[0] = "ls";
globbuf.gl_pathv[1] = "-l";
execvp("ls", &globbuf.gl_pathv[0]);
VOIR AUSSI
ls(1), sh(1), stat(2), exec(3), fnmatch(3), malloc(3), opendir(3),
readdir(3), wordexp(3), glob(7)
COLOPHON
Cette page fait partie de la publication 3.23 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/.
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, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
francophone de traduction de Debian.
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> ».