Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
DIRNAME
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- EXEMPLE
- VALEUR RENVOYÉE
- NOTES
- BOGUES
- CONFORMITÉ À
- VOIR AUSSI
- TRADUCTION
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; 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 la
chaîne path. Il faut donc 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 :
path dirname basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr"
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."
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
", 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 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 autrement.
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.
CONFORMITÉ À
POSIX.1-2001
VOIR AUSSI
basename(1), dirname(1)
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.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction 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> ».
|