Loading

NOM

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

SYNOPSIS

       #include <libgen.h>

       char *dirname(char *path);

       char *basename(char *path);

       Attention :   il   y   a  deux  fonctions  basename  différentes; voyez
       ci-dessous.

       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  « / »,  sans  l’inclure,  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  path  ne contient pas de barre oblique, dirname() renvoie la chaîne
       « . » et basename() renvoie une copie de la chaîne path.  Si  path  est
       représenté par la chaîne « / », alors dirname() et basename() renvoient
       tout deux la chaîne « / ». Si path 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.

       dirname() et basename() peuvent tous deux modifier le contenu de  path,
       il  est donc préférable de passer une copie de celui-ci lors d’un appel
       à l’une de ces fonctions.

       Ces fonctions devraient renvoyer  des  pointeurs  vers  de  la  mémoire
       allouée  statiquement qui peut être réécrite par des appels ultérieurs.
       Cependant, il pourraient renvoyer un pointeur vers une partie de  path,
       ainsi  la  chaîne  référencée  par  path  ne  doit pas être modifiée ou
       libérée tant que le pointeur renvoyé par la fonction ne possède pas  la
       bonne longueur.

       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 :

       path         dirname    basename
       "/usr/lib"    "/usr"    "lib"
       "/usr/"       "/"       "usr"
       "usr"         "."       "usr"
       "/"           "/"       "/"
       "."           "."       "."
       ".."          "."       ".."

VALEUR RENVOYÉE

       Les  fonctions  dirname() et basename() renvoient des pointeurs sur des
       chaînes terminées par un caractère nul. (Ne pas passer ces pointeurs  à
       free(3).)

CONFORMITÉ

       POSIX.1-2001.

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 utilise avec

       #define _GNU_SOURCE
       #include <string.h>

       La version GNU ne modifie jamais son argument  et  renvoie  une  chaîne
       vide  lorsque  path 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  utilise  la  version  POSIX  de  basename()  lorsque
       <libgen.h> est inclus, et la version GNU sinon.

BOGUES

       Dans  l’implémentation de la 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 glibc 2.2.1, la fonction 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.

EXEMPLE

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

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

VOIR AUSSI

       basename(1), dirname(1), feature_test_macros(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.23 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».