basename, dirname - Analyse des composants d'un chemin d'accès.
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 slash,
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 si vous devez conserver la chaîne originale, 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 chemin d'accès :
chemin dirname basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr"
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."
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);
free(dirc);
free(basec);
Christophe Blaess, 2001-2003.