Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Expressions régulières
  3. glob(), la fonction de sélection de pathnames
Extrait - Expressions régulières Syntaxe et mise en œuvre (avec exercices et corrigés) (2e édition)
Extraits du livre
Expressions régulières Syntaxe et mise en œuvre (avec exercices et corrigés) (2e édition) Revenir à la page d'achat du livre

glob(), la fonction de sélection de pathnames

Description 

glob() est une fonction bibliothèque permettant de constituer une liste de noms de fichiers correspondant à une expression de sélection du même type que les expressions du shell. Elle peut être utilisée quand un programme a besoin d’interpréter lui-même les expressions de sélection de fichiers (au sens large).

Elle est disponible dans les fonctions fournies avec le compilateur C.

Principe de fonctionnement 

1. Généralités 

La fonction glob() recherche les fichiers dont le nom long correspond à une expression donnée. L’expression en question n’est pas une expression régulière au sens où on l’entend lorsqu’on parle d’expression régulière basique ou étendue. Il s’agit là d’expression de sélection de noms de fichiers identiques à celles que l’on trouve dans les shells, et qui permettent de générer une liste de noms de fichiers (afin de les passer à un programme dans le cas du shell).

Un exemple d’utilisation possible de cette fonction est l’interprétation distante d’une expression de sélection, passée d’un programme client à un programme serveur via une connexion réseau.

Les informations de référence données ci-dessous sont extraites du manuel du programmeur Linux.

2. Utilisation 

Lorsque l’on souhaite utiliser la fonction glob() dans un programme C, il faut inclure, avant l’utilisation de la fonction, le fichier glob.h qui contient des définitions et déclarations nécessaires à la fonction.

Syntaxe

#include <glob.h> 

Il faut ensuite définir les variables qui seront utilisées par la fonction. Leur type sera défini grâce au prototype de glob() suivant, tel que spécifié par la page de manuel :

int glob(const char *pattern, int flags, 
        int (*errfunc) (const char *epath, int eerrno), 
        glob_t *pglob); 

Les paramètres passés à glob() ont l’usage suivant :

  • pattern : expression de sélection de nom de fichier, utilisant la syntaxe du shell.

  • flags : indicateurs binaires destinés à modifier le comportement...

Exercices 

1. Exercice 1 

Comment récupérer et afficher la liste des fichiers du répertoire courant se terminant par l’extension .txt ?

L’expression à utiliser est *.txt.

Solution

#include  <stdio.h>  
#include  <stdlib.h>  
#include  <string.h>  
#include  <glob.h>  
 
int main()  
{  
    int        _i;  
    glob_t     _globbuf;  
    char      *_regexp = "*.txt";  
 
    _globbuf.gl_offs    = 0;  
    switch (glob(_regexp, 0, NULL, &_globbuf)) {  
 
    case GLOB_NOSPACE:  
           fprintf(stderr, "Pas assez de memoire !\n");  
           break;  
 
    case GLOB_ABORTED:  
           fprintf(stderr, "Erreur de lecture !\n");  
           break;  
 
    case GLOB_NOMATCH:  
           fprintf(stderr, "Pas de correspondance.\n");  
           break;  
 
    default:  
           for (_i = 0; _globbuf.gl_pathv[_i] != NULL; _i++) { 
                 printf("%5d %s\n", _i, _globbuf.gl_pathv[_i]); 
           }  
           break;  
    }  
 
    return 0;  
} 

L’exécution de ce programme dans un répertoire contenant les fichiers texte f1.txt, f2.txt et f3.txt produira le résultat suivant :

   0 f1.txt 
   1 f2.txt 
   2 f3.txt 

Aucun argument n’est passé à ce programme via la ligne de commande. L’expression de sélection est codée dans le programme sous forme d’une chaîne de caractères pointée par la variable...