Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

       basename, dirname - Analyser les composants d'un chemin d'accès

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <libgen.h>

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

DESCRIPTION

       Attention : il existe deux fonctions basename() différentes ; voir ci-dessous.

       Les  fonctions  dirname()  et basename() décomposent un chemin d'accès, représenté sous la
       forme d'une chaîne terminée par un caractère NULL, 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 chemin n'en font pas partie.

       Si  chemin  ne  contient  pas  de  barre  oblique,  dirname()  renvoie  la chaîne « . » et
       basename() renvoie une copie de la chaîne chemin. Si chemin correspond à la chaîne  « / »,
       alors  dirname()  et  basename()  renvoient  toutes deux la chaîne « / ». Si chemin est un
       pointeur NULL ou pointe vers une chaîne vide,  alors  dirname()  et  basename()  renvoient
       toutes 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 toutes deux modifier le contenu de chemin ;  il  est  donc
       souhaitable de passer une copie de celui-ci lors d'un appel à l'une de ces fonctions.

       Ces  fonctions  peuvent renvoyer des pointeurs vers de la mémoire allouée statiquement qui
       peut être écrasée par des appels ultérieurs. Elles peuvent aussi renvoyer un pointeur vers
       une  partie  de  chemin,  de façon à ce que la chaîne référencée par chemin ne puisse être
       modifiée ou libérée que  lorsque  le  pointeur  renvoyé  par  la  fonction  ne  sera  plus
       nécessaire.

       La liste d'exemples suivante (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
              /            /         /
              .            .         .
              ..           .         ..

VALEUR RENVOYÉE

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

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │basename(), dirname()                                   │ Sécurité des threads │ MT-Safe │
       └────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       POSIX.1-2001, POSIX.1-2008.

NOTES

       Il  existe 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         /* Consultez feature_test_macros(7) */
           #include <string.h>

       La version GNU ne modifie jamais son argument et renvoie une chaîne vide lorsque chemin se
       termine  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 dans le cas contraire.

BOGUES

       Dans  l'implémentation  de  la  glibc,  les  versions  POSIX  de  ces  fonctions modifient
       l'argument chemin et génèrent une erreur de segmentation lorsqu'elles sont  appelées  avec
       une chaîne statique comme « /usr/ ».

       Avant  la  glibc 2.2.1,  la  version  de  la  glibc de la fonction dirname() ne gérait pas
       correctement les chemins se terminant par un caractère « / » et  générait  une  erreur  de
       segmentation lorsqu'on lui passait un pointeur NULL comme argument.

EXEMPLES

       L'extrait de code suivant montre l'utilisation de basename() et dirname() :
           char *copie_rep, *copie_base, *nom_base, *nom_rep;
           char *chemin = "/etc/passwd";

           copie_rep = strdup(chemin);
           copie_base = strdup(chemin);
           nom_rep = dirname(copie_rep);
           nom_base = basename(copie_base);
           printf("Nom répertoire = %s, Nom base = %s\n", nom_rep, nom_base);

VOIR AUSSI

       basename(1), dirname(1)

TRADUCTION

       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   Lucien   Gentis
       <lucien.gentis@waika9.com>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.