NOM¶
basename, dirname - Analyse des composants d'un chemin d'accès
SYNOPSIS¶
#include <libgen.h>
char *dirname(char *path);
char *basename(char *path);
DESCRIPTION¶
Attention : il y a deux fonctions
basename
différentes; consultez 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).)
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 /* Consultez feature_test_macros(7) */
#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)
COLOPHON¶
Cette page fait partie de la publication 3.44 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et
l'équipe francophone de traduction de Debian (2006-2009).
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> ».