Provided by: manpages-fr-dev_3.57d1p1-1_all bug

NOM

       readlink - Lire le contenu d'un lien symbolique

SYNOPSIS

       #include <unistd.h>

       ssize_t readlink(const char *path, char *buf, size_t bufsiz);

   Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

       readlinkat() :
           _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED ||
           _POSIX_C_SOURCE >= 200112L

DESCRIPTION

       readlink()  place  le  contenu  du  lien  symbolique  path dans le tampon buf, dont la taille est bufsiz.
       readlink() n'ajoute pas de caractère NUL dans le tampon buf. Il  tronquera  le  contenu  (à  la  longueur
       bufsiz) si le tampon est trop petit pour recevoir les données.

VALEUR RENVOYÉE

       S'il  réussit, readlink() renvoie le nombre d'octets placés dans buf. S'il échoue, il renvoie -1 et écrit
       errno en conséquence.

ERREURS

       EACCES Un élément du chemin d'accès ne permet pas la recherche. (Consultez aussi path_resolution(7).)

       EFAULT buf pointe en dehors de l'espace d'adressage accessible.

       EINVAL bufsiz n'est pas positif.

       EINVAL Le fichier n'est pas un lien symbolique.

       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
              path ou l'un des composants de ce chemin d'accès est trop long.

       ENOENT Le fichier indiqué n'existe pas.

       ENOMEM Pas assez de mémoire pour le noyau.

       ENOTDIR
              Un élément du chemin d'accès n'est pas un répertoire.

CONFORMITÉ

       BSD 4.4 (readlink() est apparue pour la première fois dans BSD 4.2), POSIX.1-2001.

NOTES

       Dans les versions de glibc jusqu'à 2.4 incluse, le type de retour de readlink() était déclaré comme  int.
       À présent, le type de retour est déclaré comme ssize_t, ainsi que le prescrit POSIX.1-2001.

       L'utilisation  d'un  tampon de taille statique risque de ne pas fournir assez de place pour le contenu du
       lien symbolique. La taille nécessaire au tampon peut être lue dans la valeur stat.st_size renvoyée par un
       appel à lstat(2) sur le lien. Cependant, le nombre d'octets écrits par readlink()  devrait  être  vérifié
       pour s'assurer que la taille du lien symbolique n'a pas augmenté entre les appels. L'allocation dynamique
       du  tampon pour readlink() résout aussi un problème habituel de portabilité si PATH_MAX est utilisé comme
       taille de tampon, car la définition de cette constante n'est pas garantie par POSIX si le système n'a pas
       ce genre de limite.

EXEMPLE

       Le programme suivant alloue le tampon nécessaire à readlink() dynamiquement à partir des données fournies
       par lstat(), en s'assurant qu'il n'y a pas de situation de compétition entre les appels.

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       int
       main(int argc, char *argv[])
       {
           struct stat sb;
           char *linkname;
           ssize_t r;

           if (argc != 2) {
               fprintf(stderr, "Utilisation : %s <chemin>\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           if (lstat(argv[1], &sb) == -1) {
               perror("lstat");
               exit(EXIT_FAILURE);
           }

           linkname = malloc(sb.st_size + 1);
           if (linkname == NULL) {
               fprintf(stderr, "mémoire insuffisante\n");
               exit(EXIT_FAILURE);
           }

           r = readlink(argv[1], linkname, sb.st_size + 1);

           if (r == -1) {
               perror("readlink");
               exit(EXIT_FAILURE);
           }

           if (r > sb.st_size) {
               fprintf(stderr, "la taille du lien symbolique a augmenté"
                               "entre lstat() et readlink()\n");
               exit(EXIT_FAILURE);
           }

           linkname[r] = '\0';

           printf("« %s » pointe vers « %s »\n", argv[1], linkname);

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       readlink(1), lstat(2), readlinkat(2), stat(2), symlink(2), path_resolution(7), symlink(7)

COLOPHON

       Cette page fait partie de la publication 3.57 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

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

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

Linux                                            26 octobre 2013                                     READLINK(2)