REALPATH
Section : Manuel du programmeur Linux (
3)
Mise à jour de la version anglaise : 26 juillet 2007
Index
Menu principal
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
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 octet nul, pointée par
path
et stocke le résultat dans le tampon de taille
PATH_MAX
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.
Sinon elle renvoie NULL, et le contenu du tableau
resolved_path
est indéterminé.
La variable globale
errno
contient le code d'erreur.
ERREURS
- EACCES
-
La permission de recherche 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 la section NOTES plus loin.
- EIO
-
Une erreur d'entrée-sortie s'est produite lors de la lecture sur le système de fichiers.
- ELOOP
-
Trop de liens symboliques rencontrés lors du parcours du 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.
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 plus haut).
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.
NOTES
L'implémentation glibc de
realpath()
fournit une extension non standard.
Si
resolved_path
est NULL,
realpath()
utilise
malloc(3)
pour allouer un tampon allant jusqu'à
PATH_MAX
octets pour stocker le chemin résolu et renvoie un pointeur sur ce tampon.
L'appelant doit libérer ce tampon avec
free(3).
BOGUES
Évitez d'utiliser cette fonction.
Sa conception est erronée car,
à moins d'utiliser la fonctionnalité non standard
resolved_path == NULL,
elle ne permet pas de connaître la taille nécessaire
pour le tampon de sortie
resolved_path.
D'après POSIX, 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é.
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)
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 6 novembre 1996
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 3 realpath ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- VERSIONS
-
- CONFORMITÉ
-
- NOTES
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008