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() expands all symbolic links and resolves references to /./, /../ and extra '/' characters in the null-terminated string named by path to produce a canonicalized absolute pathname. The resulting pathname is stored as a null-terminated string, up to a maximum of PATH_MAX bytes, in the buffer pointed to by resolved_path. The resulting path will have no symbolic link, /./ or /../ components.
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_résolu 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
path is NULL. (Before glibc 2.3, this error is also returned if resolved_path is 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.
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
 

STANDARDS

4.4BSD, POSIX.1-2001.
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.

NOTES

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.)

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.

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 <[email protected]>, Thierry Vignaud <[email protected]>, François Micaux, Alain Portal <[email protected]>, Jean-Philippe Guérard <[email protected]>, Jean-Luc Coulon (f5ibh) <[email protected]>, Julien Cristau <[email protected]>, Thomas Huriaux <[email protected]>, Nicolas François <[email protected]>, Florentin Duneau <[email protected]>, Simon Paillard <[email protected]>, Denis Barbier <[email protected]>, David Prévot <[email protected]> et bubu <[email protected]>
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 à [email protected]