GLOB
Section : Manuel du programmeur Linux (
3)
Mise à jour de la version anglaise : 10 octobre 2007
Index
Menu principal
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);
DESCRIPTION
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éfinie 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 zonz 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
-
Ajouter une barre oblique finale à chaque nom aboutissant à un répertoire.
- GLOB_NOSORT
-
Ne pas trier les chemins d'accès renvoyés (ils le sont par défaut).
La seule raison pour faire cela est d'économiser du temps de traitement.
- GLOB_DOOFFS
-
Réserver
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
-
Ajouter les résultats de cet appel au vecteur des 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 méta-caractères.
Normalement, une contre oblique peut être utilisée pour déspécifier
le caractère qui le suit, fournissant un mécanisme de désactivation
du sens particulier des méta-caractères.
flags
peut également inclure 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,
plutôt que les fonctions normales de la bibliothèque
pour accéder au système de fichiers.
- GLOB_BRACE
-
Développer dans le style
csh(1)
les expressions de type
{a,b}
qui 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 subsitué 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 subsitué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 subsitution 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 valide
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
astuce
pour
glob()
pour que l'appelant ne s'intéresse qu'aux répétoires
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
errno
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 vers une liste de pointeurs sur les chemins
qui correspondent.
La liste des pointeurs est terminée par un pointeur 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-jacente, 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)
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 3 novembre 1996
et révisée le 17 juillet 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 glob ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- CONFORMITÉ
-
- NOTES
-
- BOGUES
-
- EXEMPLE
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008