glob(3) | Library Functions Manual | glob(3) |
glob, globfree - Rechercher un chemin d'accès correspondant à un motif
Bibliothèque C standard (libc, -lc)
#include <glob.h>
int glob(const char *restrict pattern, int flags, int (*errfunc)(const char *epath, int eerrno), glob_t *restrict 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 (consultez glob(7)). Aucun remplacement de tilde ou substitution de paramètre n'est effectué. Si vous avez besoin de ces fonctionnalités, utilisez 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() :
flags peut également utiliser les constantes suivantes, qui sont des extensions GNU, non définies dans POSIX.2 :
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é.
S'il réussit complètement glob() renvoie zéro. Les autres valeurs renvoyées peuvent être :
Pour une explication des termes utilisés dans cette section, consulter attributes(7).
Interface | Attribut | Valeur |
glob() | Sécurité des threads | MT-Unsafe race:utent env sig:ALRM timer locale |
globfree() | Sécurité des threads | MT-Safe |
In the above table, utent in race:utent signifies that if any of the functions setutent(3), getutent(3), or endutent(3) are used in parallel in different threads of a program, then data races could occur. glob() calls those functions, so we use race:utent to remind users.
POSIX.1-2001, POSIX.1-2008, POSIX.2.
Les éléments de la structure gl_pathc et gl_offs sont déclarés comme des size_t dans glibc 2.1, comme préconisé dans POSIX.2, mais sont déclarés sous forme de int dans glibc 2.0.
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.
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]);
ls(1), sh(1), stat(2), exec(3), fnmatch(3), malloc(3), opendir(3), readdir(3), wordexp(3), glob(7)
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 Frédéric Hantrais <fhantrais@gmail.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.
5 février 2023 | Pages du manuel de Linux 6.03 |