NOM
realpath - Renvoie le chemin d’accès absolu.
SYNOPSIS
#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 (voir
feature_test_macros(7)) :
realpath() : _BSD_SOURCE || _XOPEN_SOURCE >= 500
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 « /../ ».
Si resolved_path est NULL, alors realpath() utilise malloc(3) pour
allouer un tampon allant jusqu’à PATH_MAX octets pour contenir le
chemin trouvé, et retourner un pointeur sur ce tampon. L’appelant doit
libérer ce tampon avec free(3).
VALEUR RENVOYÉE
S’il n’y a pas d’erreur, realpath() renvoie un pointeur sur
resolved_path.
Sinon elle renvoie NULL, le contenu de resolved_path n’est pas défini,
et errno prend la valeur du code d’erreur.
ERREURS
EACCES La permission de recherche ou de lecture n’est pas accordée pour
un composant du chemin d’accès.
EINVAL Soit path, soit resolved_path est NULL (dans la libc5, cela
déclenchait une erreur de segmentation). Mais voir quand même la
section NOTES ci-dessous.
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.
POSIX.1 indique que le comportement dans le cas où resolved_path est
NULL dépend de l’implémentation. POSIX.1-2008 spécifie le comportement
décrit dans cette page.
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 BOGUES).
Les versions BSD 4.4, Linux et SUSv2 renvoient toujours un chemin
absolu. Solaris peut renvoyer un chemin relatif si l’argument path est
relatif. 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), ont 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.23 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
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, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Nicolas François
<nicolas.francois@centraliens.net> et l’équipe francophone de
traduction de Debian.
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> ».
23 février 2009