.\" Copyright (c) 1983, 1991 The Regents of the University of California. .\" And Copyright (C) 2011 Guillem Jover .\" And Copyright (C) 2006, 2014 Michael Kerrisk .\" All rights reserved. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" %%%LICENSE_END .\" .\" @(#)readlink.2 6.8 (Berkeley) 3/10/91 .\" .\" Modified Sat Jul 24 00:10:21 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified Tue Jul 9 23:55:17 1996 by aeb .\" Modified Fri Jan 24 00:26:00 1997 by aeb .\" 2011-09-20, Guillem Jover : .\" Added text on dynamically allocating buffer + example program .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH READLINK 2 "21 février 2014" Linux "Manuel du programmeur Linux" .SH NOM readlink, readlinkat \- Lire le contenu d'un lien symbolique .SH SYNOPSIS .nf \fB#include \fP .sp \fBssize_t readlink(const char *\fP\fIpathname\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbufsiz\fP\fB);\fP .sp \fB#include /* Définition des constantes AT_* */\fP \fB#include \fP .sp \fBint readlinkat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB,\fP \fB char *\fP\fIbuf\fP\fB, size_t \fP\fIbufsiz\fP\fB);\fP .sp .fi .in -4n Exigences de macros de test de fonctionnalités pour la glibc (consultez \fBfeature_test_macros\fP(7))\ : .in .sp .ad l \fBreadlinkat\fP()\ : .RS 4 _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE\ >=\ 200112L .RE .sp \fBreadlinkat\fP(): .PD 0 .ad l .RS 4 .TP 4 Depuis la glibc 2.10\ : _XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L .TP Avant la glibc 2.10\ : _ATFILE_SOURCE .RE .ad b .PD .SH DESCRIPTION \fBreadlink\fP() place le contenu du lien symbolique \fIpathname\fP dans le tampon \fIbuf\fP, dont la taille est \fIbufsiz\fP. \fBreadlink\fP() n'ajoute pas de caractère \fBNUL\fP dans le tampon \fIbuf\fP. Il tronquera le contenu (à la longueur \fIbufsiz\fP) si le tampon est trop petit pour recevoir les données. .SS readlinkat() L'appel système \fBreadlinkat\fP() fonctionne exactement comme \fBreadlink\fP(), les seules différences étant décrites ici. Si \fIpathname\fP est un chemin relatif, il est interprété par rapport au répertoire référencé par le descripteur de fichier \fIdirfd\fP (plutôt que par rapport au répertoire courant du processus appelant, comme cela est fait par \fBreadlink\fP() pour un chemin relatif). Si \fIpathname\fP est relatif et si \fIdirfd\fP a la valeur spéciale \fBAT_FDCWD\fP, alors \fIpathname\fP est interprété relativement au répertoire de travail du processus appelant, comme pour \fBreadlink\fP(). Si \fIpathname\fP est un chemin absolu, \fIdirfd\fP est ignoré. .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d Depuis Linux\ 2.6.39, \fIpathname\fP peut être une chaîne vide, auquel cas l'appel opère sur le fichier référencé par \fIdirfd\fP (qui peut avoir été obtenu par \fBopen\fP(2) avec le drapeau \fBO_PATH\fP). DAns ce cas, \fIdirfd\fP peut référer à tout type de fichier, pas uniquement un répertoire. .PP Consultez \fBopenat\fP(2) pour une explication de la nécessité de \fBreadlinkat\fP(). .SH "VALEUR RENVOYÉE" S'il réussit, ces appels renvoient le nombre d'octets placés dans \fIbuf\fP. S'il échoue, il renvoie \-1 et écrit \fIerrno\fP en conséquence. .SH ERREURS .TP \fBEACCES\fP Un élément du chemin d'accès ne permet pas la recherche. (Consultez aussi \fBpath_resolution\fP(7).) .TP \fBEFAULT\fP \fIbuf\fP pointe en dehors de l'espace d'adressage accessible. .TP \fBEINVAL\fP .\" At the glibc level, bufsiz is unsigned, so this error can only occur .\" if bufsiz==0. However, the in the kernel syscall, bufsiz is signed, .\" and this error can also occur if bufsiz < 0. .\" See: http://thread.gmane.org/gmane.linux.man/380 .\" Subject: [patch 0/3] [RFC] kernel/glibc mismatch of "readlink" syscall? \fIbufsiz\fP n'est pas positif. .TP \fBEINVAL\fP Le fichier n'est pas un lien symbolique. .TP \fBEIO\fP Une erreur d'entrée\-sortie est survenue lors de la lecture sur le système de fichiers. .TP \fBELOOP\fP Trop de liens symboliques ont été rencontrés en parcourant le chemin. .TP \fBENAMETOOLONG\fP \fIpath\fP ou l'un des composants de ce chemin d'accès est trop long. .TP \fBENOENT\fP Le fichier indiqué n'existe pas. .TP \fBENOMEM\fP Pas assez de mémoire pour le noyau. .TP \fBENOTDIR\fP Un élément du chemin d'accès n'est pas un répertoire. .PP Les erreurs supplémentaires suivantes peuvent également se produire pour \fBreadlinkat\fP()\ : .TP \fBEBADF\fP \fIdirfd\fP n'est pas un descripteur de fichier valable. .TP \fBENOTDIR\fP \fIpathname\fP est relatif, et le descripteur de fichier \fIdirfd\fP est associé à un fichier, pas à un répertoire. .SH VERSIONS \fBreadlinkat\fP() a été ajouté au noyau Linux dans sa version 2.6.16\ ; la glibc le gère depuis la version\ 2.4. .SH CONFORMITÉ \fBreadlink\fP()\ : BSD\ 4.4 (\fBreadlink\fP() est apparue pour la première fois dans BSD\ 4.2), POSIX.1\-2001, POSIX.1\-2008. \fBreadlinkat\fP()\ : POSIX.1\-2008. .SH NOTES Dans les versions de glibc jusqu'à 2.4 incluse, le type de retour de \fBreadlink\fP() était déclaré comme \fIint\fP. À présent, le type de retour est déclaré comme \fIssize_t\fP, 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 \fIstat.st_size\fP renvoyée par un appel à \fBlstat\fP(2) sur le lien. Cependant, le nombre d'octets écrits par \fBreadlink\fP() et par \fBreadlinkat\fP() 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 \fBreadlink\fP() et pour \fBreadlinkat\fP() résout aussi un problème habituel de portabilité si \fIPATH_MAX\fP 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. .SH EXEMPLE Le programme suivant alloue le tampon nécessaire à \fBreadlink\fP() dynamiquement à partir des données fournies par \fBlstat\fP(), en s'assurant qu'il n'y a pas de situation de compétition entre les appels. .nf #include #include #include #include #include int main(int argc, char *argv[]) { struct stat sb; char *linkname; ssize_t r; if (argc != 2) { fprintf(stderr, "Utilisation\ : %s \en", 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\en"); 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()\en"); exit(EXIT_FAILURE); } linkname[r] = \(aq\e0\(aq; printf("«\ %s\ » pointe vers «\ %s\ »\en", argv[1], linkname); exit(EXIT_SUCCESS); } .fi .SH "VOIR AUSSI" \fBreadlink\fP(1), \fBlstat\fP(2), \fBstat\fP(2), \fBsymlink\fP(2), \fBpath_resolution\fP(7), \fBsymlink\fP(7) .SH COLOPHON Cette page fait partie de la publication 3.65 du projet \fIman\-pages\fP 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/. .SH TRADUCTION Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a par l'équipe de traduction francophone au sein du projet perkamon . .PP Christophe Blaess (1996-2003), Alain Portal (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian\ (2006-2009). .PP Veuillez signaler toute erreur de traduction en écrivant à ou par un rapport de bogue sur le paquet \fBmanpages\-fr\fR. .PP Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande «\ \fBman\ \-L C\fR \fI
\fR\ \fI\fR\ ».