man basename (Fonctions bibliothèques) - Analyse des composants d'un chemin d'accès.

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

TRADUCTION

Christophe Blaess, 2001-2003.

CETTE PAGE DOCUMENTE AUSSI :