man realpath (Fonctions bibliothèques) - Renvoie le chemin d'accès absolu.
NOM
realpath - Renvoie le chemin d'accès absolu.
SYNOPSIS
#include <sys/param.h> #include <stdlib.h> char *realpath (char *path, char resolved_path[]);
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 caractere nul, pointée par path et stocke le résultat dans le buffer de taille MAXPATHLEN 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 resolved_path contient le chemin d'accès absolu vers l'élément de path qui ne peut pas être résolu, et 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 resolv_path est NULL (Dans la libc5 cela déclenchait une faute de segmentation).
- EIO
- Une erreur d'entrée/sortie s'est produite sur le système de fichiers.
- ELOOP
- Trop de liens symboliques rencontrés.
- 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.
BOGUES
N'utilisez jamais cette fonction. Son design est erroné cae elle ne permet pas de connaître la taille nécessaire pour le buffer de sortie. D'après POSIX un buffer de taille PATH_MAX suffit, mais PATH_MAX n'est pas nécessaire une constante définie et peut être obtenue avec pathconf(). En outre, interroger pathconf() n'aide pas vraiment, car d'une part POSIX prévient que les résultats de pathconf() peuvent être immenses et inappropriés pour allouer de la mémoire et d'autre part pathconf() peut renvoyer -1 indiquant que PATH_MAX est illimité.
Les implémentations dans les libc4 et libc5 contenaient un débordement de buffer (corrigé dans la libc-5.4.13). Ainsi, les programmes Set-UID, comme mount ont besoin d'une version privée de cette routine.
HISTORIQUE
La fonction realpath est apparue dans BSD 4.4, due à Jan-Simon Pendry. Sous Linux, cette fonction est apparue dans la libc 4.5.21.
CONFORMITÉ
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(). Un fragmen 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 toujous 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.