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> ».