basename(3) Library Functions Manual basename(3) NOM basename, dirname - Analyser les composants d'un chemin d'acces BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include char *dirname(char *chemin); char *basename(char *chemin); DESCRIPTION Attention : il existe deux fonctions basename() differentes ; voir ci-dessous. Les fonctions dirname() et basename() decomposent un chemin d'acces, represente sous la forme d'une chaine terminee par un caractere NULL, en ses composants repertoire et nom de fichier. En general, dirname() renvoie la chaine s'etendant jusqu'au dernier << / >>, sans l'inclure, et basename() renvoie la partie se trouvant apres le dernier << / >>. Les caracteres << / >> en fin de chemin n'en font pas partie. Si chemin ne contient pas de barre oblique, dirname() renvoie la chaine << . >> et basename() renvoie une copie de la chaine chemin. Si chemin correspond a la chaine << / >>, alors dirname() et basename() renvoient toutes deux la chaine << / >>. Si chemin est un pointeur NULL ou pointe vers une chaine vide, alors dirname() et basename() renvoient toutes deux la chaine << . >>. En mettant bout a bout la chaine renvoyee par dirname(), un << / >> et la chaine renvoyee par basename(), on obtient un chemin d'acces complet. dirname() et basename() peuvent toutes deux modifier le contenu de chemin ; il est donc souhaitable de passer une copie de celui-ci lors d'un appel a l'une de ces fonctions. Ces fonctions peuvent renvoyer des pointeurs vers de la memoire allouee statiquement qui peut etre ecrasee par des appels ulterieurs. Elles peuvent aussi renvoyer un pointeur vers une partie de chemin, de facon a ce que la chaine referencee par chemin ne puisse etre modifiee ou liberee que lorsque le pointeur renvoye par la fonction ne sera plus necessaire. La liste d'exemples suivante (prise dans SUSv2) montre les chaines renvoyees par dirname() et basename() pour differents chemins d'acces : chemin dirname basename /usr/lib /usr lib /usr/ / usr usr . usr / / / . . . .. . .. VALEUR RENVOYEE Les fonctions dirname() et basename() renvoient des pointeurs sur des chaines terminees par un caractere NULL (ne pas passer ces pointeurs a free(3)). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |basename(), dirname() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ VERSIONS Il existe deux versions differentes de basename() : la version POSIX decrite precedemment et la version GNU que l'on utilise avec #define _GNU_SOURCE /* Consultez feature_test_macros(7) */ #include La version GNU ne modifie jamais son argument et renvoie une chaine vide lorsque chemin se termine 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 est inclus et la version GNU dans le cas contraire. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001. BOGUES Dans l'implementation de la glibc, les versions POSIX de ces fonctions modifient l'argument chemin et generent une erreur de segmentation lorsqu'elles sont appelees avec une chaine statique comme << /usr/ >>. Avant la glibc 2.2.1, la version de la glibc de la fonction dirname() ne gerait pas correctement les chemins se terminant par un caractere << / >> et generait une erreur de segmentation lorsqu'on lui passait un pointeur NULL comme argument. EXEMPLES L'extrait de code suivant montre l'utilisation de basename() et dirname() : char *copie_rep, *copie_base, *nom_base, *nom_rep; char *chemin = "/etc/passwd"; copie_rep = strdup(chemin); copie_base = strdup(chemin); nom_rep = dirname(copie_rep); nom_base = basename(copie_base); printf("Nom repertoire = %s, Nom base = %s\n", nom_rep, nom_base); VOIR AUSSI basename(1), dirname(1) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 basename(3)