glob(3) Library Functions Manual glob(3) NOM glob, globfree - Rechercher un chemin d'acces correspondant a un motif BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int glob(const char *restrict pattern, int flags, int (*errfunc)(const char *epath, int eerrno), glob_t *restrict pglob); void globfree(glob_t *pglob); DESCRIPTION La fonction glob() recherche tous les chemins d'acces correspondant au motif pattern en utilisant les regles du shell (consultez glob(7)). Aucun remplacement de tilde ou substitution de parametre n'est effectue. Si vous avez besoin de ces fonctionnalites, utilisez wordexp(3). La fonction globfree() libere la memoire allouee dynamiquement lors d'un appel precedent a glob(). Les resultats d'un appel a glob() sont stockes dans une structure pointee par pglob. Cette structure est de type glob_t (defini dans ) et inclut les elements definis 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; /* Entrees a reserver dans gl_pathv. */ } glob_t; Les resultats sont sauves dans une zone allouee dynamiquement. Le parametre flags est constitue d'un OU binaire << | >> entre zero ou plus des constantes symboliques suivantes, modifiant le comportement de glob() : GLOB_ERR Terminer des qu'une erreur se produit (par exemple, un repertoire non lisible). Par defaut, glob() tente, malgre les erreurs, de lire tous les repertoires qu'il peut. GLOB_MARK Ajoute une barre oblique finale a chaque nom correspondant a un repertoire. GLOB_NOSORT Ne pas trier les chemins d'acces renvoyes. La seule raison pour faire cela est d'economiser du temps de traitement. Par defaut, les chemins d'acces renvoyes sont tries. GLOB_DOOFFS Reserve pglob->gl_offs points d'entree au debut de la liste de chaines dans pglob->pathv. Les points d'entree reserves contiennent des pointeurs NULL. GLOB_NOCHECK Si aucun motif ne correspond, renvoyer le motif original. Par defaut, glob() renvoie GLOB_NOMATCH s'il n'y a pas de correspondance. GLOB_APPEND Ajoute les resultats de cet appel au tableau de resultats renvoye par un appel precedent a glob(). Ne pas indiquer cet attribut lors du premier appel de glob(). GLOB_NOESCAPE Ne pas permettre l'utilisation de barre oblique inverse (<< \ >>) pour desactiver les caracteres d'echappement. Normalement, une barre oblique inverse peut etre utilisee pour echapper le caractere qui le suit, fournissant un mecanisme de desactivation du sens particulier des meta-caracteres. flags peut egalement utiliser les constantes suivantes, qui sont des extensions GNU, non definies dans POSIX.2 : GLOB_PERIOD Permettre a un point en tete de chemin de correspondre a un meta-caractere. Par defaut, les meta-caracteres ne peuvent pas correspondre a un point en tete 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'acces au systeme de fichiers au lieu des fonctions normales de bibliotheque. GLOB_BRACE Developper dans le style csh(1) les expressions de type {a,b}. Les expressions entre accolades peuvent etre imbriquees. Ainsi, par exemple, specifier le motif << {foo/{,cat,dog},bar} >> retournera le meme resultat que quatre appels a glob() separes utilisant les chaines : << foo/ >>, << foo/cat >>, << foo/dog >>, et << bar >>. GLOB_NOMAGIC Si le motif renvoye ne contient pas de meta-caracteres, il sera retourne comme seul mot correspondant, meme 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 caractere du motif, ou si un tilde en tete est suivi par une barre oblique (<< / >>), le repertoire personnel de l'appelant sera substitue au tilde. Si un tilde en tete est suivi par un nom d'utilisateur (par exemple, << ~alain/bin >>, le tilde et le nom d'utilisateur sont substitues par le repertoire personnel de cet utilisateur. Si le nom d'utilisateur n'est pas valide ou si le repertoire personnel ne peut pas etre determine, la substitution n'est pas effectuee. GLOB_TILDE_CHECK Fournit un comportement similaire a celui de GLOB_TILDE. La difference est que si le nom d'utilisateur n'est pas valable ou si le repertoire personnel ne peut pas etre determine, plutot que d'utiliser le motif lui-meme comme nom, glob() renvoie GLOB_NOMATCH pour indiquer l'erreur. GLOB_ONLYDIR C'est une indication pour glob() indiquant que l'appelant ne s'interesse qu'aux repertoires correspondant au motif. Si l'implementation peut facilement determiner le type de fichier, les fichiers qui ne sont pas des repertoires ne sont pas renvoyes a l'appelant. Toutefois, l'appelant doit toujours verifier que les fichiers renvoyes sont des repertoires (le but de cet attribut est simplement d'optimiser les performances lorsque l'appelant ne s'interesse qu'aux repertoires). Si errfunc n'est pas NULL, elle sera appelee en cas d'erreur, avec les arguments epath un pointeur sur le chemin qui a echoue, et eerrno la valeur de errno telle qu'elle a ete renvoyee par un appel a opendir(3), readdir(3) ou stat(2). Si errfunc renvoie une valeur non nulle, ou si GLOB_ERR est positionne, glob() se terminera apres l'appel de errfunc. Si glob() reussit completement, pglob->gl_pathc contient le nombre de chemins d'acces correspondants et pglob->gl_pathv contient un pointeur sur une liste des chemins. Le premier pointeur apres le dernier chemin vaut NULL. Il est possible d'appeler glob() plusieurs fois. Dans ce cas, l'attribut GLOB_APPEND doit etre indique dans flags durant le second appel et les suivants. En tant qu'extension GNU, le champ pglob->gl_flags contient les attributs indiques lies par un OU avec GLOB_MAGCHAR si un meta-caractere a ete trouve. VALEUR RENVOYEE S'il reussit completement glob() renvoie zero. Les autres valeurs renvoyees peuvent etre : GLOB_NOSPACE pas assez de memoire, GLOB_ABORTED erreur de lecture, et GLOB_NOMATCH aucune correspondance trouvee. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +-----------+--------------------------+-------------------------------+ |Interface | Attribut | Valeur | +-----------+--------------------------+-------------------------------+ |glob() | Securite des threads | MT-Unsafe race:utent env | | | | sig:ALRM timer locale | +-----------+--------------------------+-------------------------------+ |globfree() | Securite des threads | MT-Safe | +-----------+--------------------------+-------------------------------+ Dans le tableau ci-dessus, utent dans race:utent signifie que si des fonctions parmi setutent(3), getutent(3) ou endutent(3) sont utilisees en parallele dans differents threads d'un programme, des situations de competition entre donnees pourraient apparaitre. glob() appelle ces fonctions, nous utilisons donc race:utent pour le rappeler aux utilisateurs. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001, POSIX.2. NOTES Les elements de la structure gl_pathc et gl_offs sont declares comme des size_t dans glibc 2.1, comme preconise dans POSIX.2, mais sont declares sous forme de int dans glibc 2.0. BOGUES La fonction glob() peut echouer en cas d'erreur dans un appel de fonction sous-jacent, comme malloc(3) ou opendir(3). Le code d'erreur sera alors stocke dans errno. EXEMPLES 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 La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Frederic Hantrais et Jean- Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 glob(3)