Provided by:
manpages-fr_1.67.0-1_all 
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.