table of contents
other sections
REALPATH(3) | Manuel du programmeur Linux | REALPATH(3) |
NOM¶
realpath - Renvoyer le chemin d'accès absoluSYNOPSIS¶
#include <limits.h> #include <stdlib.h>char *realpath(const char *path, char *resolved_path);
Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :
_BSD_SOURCE ||
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
DESCRIPTION¶
realpath développe tous les liens symboliques, et résout les références à « /./ », « /../ » ainsi que les caractères « / » supplémentaires dans la chaîne, terminée par un caractère nul, pointée par path pour produire une forme canonique du chemin absolu. Le chemin résultant est stocké sous la forme d'une chaîne terminée par un caractère nul pouvant contenir jusqu'à PATH_MAX octets, dans le tampon pointé par resolved_path. Le chemin résultant ne traversera plus de liens symboliques, et ne contiendra plus d'éléments « /./ » ou « /../ ».VALEUR RENVOYÉE¶
S'il n'y a pas d'erreur, realpath() renvoie un pointeur sur resolved_path.ERREURS¶
- EACCES
- La permission de recherche ou de lecture n'est pas accordée pour un composant du chemin d'accès.
- EINVAL
- path est NULL (dans les versions de glibc précédant la 2.3, cette erreur est aussi renvoyée si resolved_path est NULL).
- EIO
- Une erreur d'entrée-sortie est survenue lors de la lecture sur le système de fichiers.
- ELOOP
- Trop de liens symboliques ont été rencontrés en parcourant le chemin.
- ENAMETOOLONG
- Un élément du chemin d'accès dépasse NAME_MAX caractères de long, ou le chemin d'accès complet dépasse PATH_MAX caractères.
- ENOENT
- Le fichier indiqué n'existe pas.
- ENOTDIR
- Un élément du chemin d'accès n'est pas un répertoire.
VERSIONS¶
Sous Linux, cette fonction est apparue dans la libc 4.5.21.CONFORMITɶ
BSD 4.4, POSIX.1-2001.NOTES¶
Dans BSD 4.4 et Solaris la limite de longueur du chemin est MAXPATHLEN (dans <sys/param.h>). SUSv2 conseille PATH_MAX et NAME_MAX, dans <limits.h> ou fournis par pathconf(3). Un fragment de code typique serait#ifdef PATH_MAX path_max = PATH_MAX; #else path_max = pathconf(path, _PC_PATH_MAX); if (path_max <= 0) path_max = 4096; #endif
(Mais voir quand même la section des BOGUES). Le prototype de realpath() est donné dans <unistd.h> dans les libc4 et libc5, mais dans <stdlib.h> partout ailleurs.
BOGUES¶
La version du standard POSIX.1-2001 de cette fonctions est erronée par construction car elle ne permet pas de connaître la taille nécessaire pour le tampon de sortie resolved_path. D'après POSIX.1-2001, un tampon de taille PATH_MAX suffit, mais PATH_MAX n'est pas nécessairement une constante définie et peut être obtenue avec pathconf(3). En outre, interroger pathconf(3) n'aide pas vraiment, car d'une part POSIX prévient que les résultats de pathconf(3) peuvent être immenses et inappropriés pour allouer de la mémoire et d'autre part pathconf(3) peut renvoyer -1 indiquant que PATH_MAX est illimité. La fonctionnalité resolved_path == NULL, non standard dans POSIX.1-2008, permet d'éviter ces problèmes. Les implémentations dans les libc4 et libc5 contenaient un débordement de tampon (corrigé dans la libc-5.4.13). Ainsi, les programmes Set-UID, comme mount(8), avaient besoin d'une version privée de cette routine.VOIR AUSSI¶
readlink(2), canonicalize_file_name(3), getcwd(3), pathconf(3), sysconf(3)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). Nicolas François 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> ».14 août 2012 |