realpath
Table des matières
Retour à l'index
NOM
realpath - Renvoyer le chemin d'accès absolu
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <limits.h>
#include <stdlib.h>
char *realpath(const char *restrict chemin,
char *restrict chemin_résolu);
Exigences de macros de test de fonctionnalités pour la glibc (consulter
feature_test_macros(7)) :
realpath() :
_XOPEN_SOURCE >= 500
|| /* glibc >= 2.19 : */ _DEFAULT_SOURCE
|| /* glibc <= 2.19 : */ _BSD_SOURCE
DESCRIPTION
realpath développe tous les liens symboliques, et résout les références à
« /./ », « /../ » ainsi que les caractères w / x supplémentaires dans
la chaîne, terminée par un caractère NULL, pointée par chemin 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 NULL pouvant
contenir jusqu'à PATH_MAX octets, dans le tampon pointé par
chemin_résolu. Le chemin résultant ne traversera plus de liens
symboliques et ne contiendra plus d'éléments « /./ » ou « /../ ».
Si chemin_résolu est NULL, alors realpath() utilise malloc(3) pour
allouer un tampon allant jusqu'à PATH_MAX octets pour contenir le chemin
trouvé, et retourne 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
chemin_résolu.
Sinon elle renvoie NULL, le contenu de chemin_rséolu 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
-
chemin est NULL (avant la glibc 2.3, cette erreur est aussi renvoyée si
chemin_résolu est NULL).
- EIO
-
Une erreur d'entrée-sortie s'est produite durant la lecture du 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.
- ENOMEM
-
Plus assez de mémoire.
- ENOTDIR
-
Un élément du chemin d'accès n'est pas un répertoire.
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
| Interface | Attribut | Valeur
|
|
realpath()
| Sécurité des threads | MT-Safe
|
VERSIONS
Extensions GNU
Si l'appel échoue avec EACCES ou ENOENT alors que chemin_résolu
n'est pas NULL, alors le préfixe de chemin qui n'est pas lisible ou qui
n'existe pas est renvoyé dans chemin_résolu.
STANDARDS
POSIX.1-2008.
HISTORIQUE
4.4BSD, POSIX.1-2001, Solaris.
POSIX.1 indique que le comportement dans le cas où chemin_résolu est NULL
dépend de l'implémentation. POSIX.1-2008 spécifie le comportement décrit
dans cette page.
Dans 4.4BSD 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.)
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 chemin_résolu. 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é
chemin_résolu == NULL, non standard dans POSIX.1-2008, permet d'éviter
ces problèmes.
VOIR AUSSI
realpath(1), readlink(2), canonicalize_file_name(3), getcwd(3),
pathconf(3), sysconf(3)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
bubu <bubub@no-log.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- ATTRIBUTS
-
- VERSIONS
-
- Extensions GNU
-
- STANDARDS
-
- HISTORIQUE
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:23 GMT, September 19, 2025