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