Provided by: manpages-fr_1.67.0-1_all bug

NOM

       basename, dirname - Analyse des composants d’un chemin d’accès.

SYNOPSIS

       #include <libgen.h>

       char *basename(char *chemin);
       char *dirname(char *chemin);

DESCRIPTION

       Attention :  il  y  a  deux  fonctions basename différentes - voir plus
       loin.

       Les fonctions basename et dirname décomposent une chaîne  terminée  par
       un  caractère  nul,  représentant  un  chemin d’accès en ses composants
       répertoire et nom de fichier.  En général, dirname  renvoie  la  chaîne
       s’étendant  jusqu’au dernier « / », non compris, et basename renvoie la
       partie se trouvant après le dernier « / ».  Les caractères « / » en fin
       de chaîne ne font pas partie du chemin.

       Si  le  chemin  ne  contient  pas  de barre oblique, dirname renvoie la
       chaîne « . » et basename renvoie une copie de la chaîne chemin.  Si  le
       chemin  est  représenté  par la chaîne « / », alors dirname et basename
       renvoient tout deux la chaîne « / ».  Si  le  chemin  est  un  pointeur
       NULL,  ou  pointe  vers  une  chaîne  vide,  alors  dirname et basename
       renvoient tout deux la chaîne « . »

       En mettant bout à bout la chaîne renvoyée par dirname, un « / », et  la
       chaîne renvoyée par basename, on obtient un chemin d’accès complet.

       Autant  dirname  que  basename peuvent modifier le contenu de la chaîne
       chemin, aussi, il faut leur transmettre des copies  de  la  chaîne.  De
       plus,  dirname et basename peuvent renvoyer des pointeurs sur des zones
       mémoires allouées statiquement,  qui  peuvent  être  écrasées  par  des
       appels consécutifs.

       La  liste  suivante  d’exemple  (prise  dans  SUSv2) montre les chaînes
       renvoyées par dirname et basename pour différents chemins d’accès :

       chemin        dirname    basename
       « /usr/lib »  « /usr »   « lib »
       « /usr/ »     « / »      « usr »
       « usr »       « . »      « usr »
       « / »         « / »      « / »
       « . »         « . »      « . »
       « .. »        « .. »     « .. »

EXEMPLE

              char *dirc, *basec, *bname, *dname;
              char *chemin = "/etc/passwd";

              dirc = strdup(chemin);
              basec = strdup(chemin);
              dname = dirname(dirc);
              bname = basename(basec);
              printf("dirname=%s, basename=%s\n", dname, bname);

VALEUR RENVOYÉE

       Les fonctions dirname et  basename  renvoient  des  pointeurs  sur  des
       chaînes terminées par un caractère nul.

NOTES

       Il y a deux versions différentes de basename - la version POSIX décrite
       précédemment, et la version GNU que l’on récupère avec
         #define _GNU_SOURCE
         #include <string.h>
       La version GNU ne modifie jamais son argument  et  renvoye  une  chaîne
       vide lorsque chemin finit par une barre oblique « / » et en particulier
       aussi lorsqu’il vaut « / ». Il n’y a pas de version GNU de dirname.

       Avec la GlibC, on récupère la  version  POSIX  de  basename  lorsqu’est
       inclus <libgen.h>, et la version GNU autrement.

BOGUES

       Dans  l’implémentation  GlibC  des  versions  POSIX  de  ces fonctions,
       celles-ci  modifient  leur  argument  et  provoquent  une   erreur   de
       segmentation lorsqu’elles sont invoquées avec une chaîne statique comme
       « /usr/ ».  Avant la version 2.2.1 de la GlibC, les versions  GlibC  de
       dirname  ne  géraient  pas correctement les chemins se terminant par un
       caractère « / » et déclenchaient une erreur de segmentation en recevant
       un pointeur NULL.

CONFORMITÉ

       POSIX 1003.1-2001

VOIR AUSSI

       dirname(1), basename(1),

TRADUCTION

       Christophe Blaess, 2001-2003.