.\" -*- coding: UTF-8 -*- .\" 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 "9 juni 2020" Linux "Linux Programmeurs Handleiding" .SH NAAM readlink, readlinkat \- lees waarde van een symbolische koppeling .SH SAMENVATTING .nf \fB#include \fP .PP \fBssize_t readlink(const char *\fP\fIpadnaam\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbufmaat\fP\fB);\fP \fB#include \fP/* Definitie van AT_* constanten */ \fB#include \fP .PP \fBssize_t readlinkat(int \fP\fImap_bes_ind\fP\fB, const char *\fP\fIpadnaam\fP\fB,\fP \fB char *\fP\fIbuf\fP\fB, size_t \fP\fIbufmaat\fP\fB);\fP .PP .fi .RS -4 Test Macro´s in glibc (zie \fBfeature_test_macros\fP(7)): .RE .PP .ad l \fBreadlink\fP(): .RS 4 .\" || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED _XOPEN_SOURCE\ >=\ 500 || _POSIX_C_SOURCE\ >=\ 200112L || /* Glibc versies <= 2.19: */ _BSD_SOURCE .RE .PP \fBreadlinkat\fP(): .PD 0 .ad l .RS 4 .TP 4 Sinds glibc 2.10: _POSIX_C_SOURCE\ >=\ 200809L .TP Vóór glibc 2.10: _ATFILE_SOURCE .RE .ad b .PD .SH BESCHRIJVING \fBreadlink\fP() plaatst de inhoud van de symbolische koppeling \fIpadnaam\fP in de buffer \fIbuf\fP, die de grootte \fIbufmaat\fP heeft. \fBreadlink\fP() voegt geen \fBNULL\fP byte toe aan \fIbuf\fP. Het zal de inhoud afkappen (bij de lengte van \fIbufmaat\fP tekens), in het geval dat de buffer te klein is om de hele inhoud te bevatten. .SS readlinkat() De \fBreadlinkat\fP() systeem aanroep werkt op exact dezelfde manier als \fBreadlink\fP(), behalve voor de hier beschreven verschillen. .PP Als de padnaam gegeven in \fIpadnaam\fP relatief is, dan wordt deze geïnterpreteerd als zijnde relatief aan de map die gerefereerd wordt door de file beschrijving \fIdirfd\fP (in plaats van relatief aan de huidige werkmap van het aanroepende proces, zoals gedaan door \fBreadlink\fP() voor een relatieve padnaam). .PP Als \fIpadnaam\fP relatief is en \fIdirfd\fP de speciale waarde \fBAT_FDCWD\fP heeft, dan wordt \fIpadnaam\fP geïnterpreteerd als relatief aan de huidige werkmap van het aanroepende proces (zoals \fBreadlink\fP()). .PP Als \fIpadnaam\fP absoluut is, dan wordt \fImapbi\fP genegeerd. .PP .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d Vanaf Linux 2.6.39 mag \fIpadnaam\fP een lege tekenreeks zijn, in welk geval de aanroep uitgaat van de symbolische koppeling zoals aangewezen door \fIdirfd\fP (die moet verkregen zijn door gebruik van \fBopen\fP(2) met de \fBO_PATH\fP en \fBO_NOFOLLOW\fP vlaggen). .PP Zie \fBopenat\fP(2) voor de uitleg over de noodzaak van \fBreadlinkat\fP(). .SH "EIND WAARDE" Bij succes, geven deze aanroepen het aantal bytes terug dat in de buffer werd geplaatst (als de teruggegeven waarde gelijk is aan \fIbufsiz\fP, dan kan afbreken zijn opgetreden.) Bij de fout wordt \-1 teruggegeven en wordt \fIerrno\fP gezet om de fout aan te geven. .SH FOUTEN .TP \fBEACCES\fP Zoek toestemming werd geweigerd voor een deel van het pad voorvoegsel. (Zie ook \fBpath_resolution\fP(7).) .TP \fBEFAULT\fP \fIbuf\fP strekt zich uit voorbij de aan het proces toegewezen adres ruimte. .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? \fIbufmaat\fP is niet positief. .TP \fBEINVAL\fP Het genoemde bestand (m.a.w. de uiteindelijke bestandsnaam component van \fIpadnaam\fP is geen symbolische koppeling. .TP \fBEIO\fP Een In/Uit fout trad op terwijl er van het bestandsysteem gelezen werd. .TP \fBELOOP\fP Teveel symbolische koppelingen werden tegengekomen bij het vertalen van de padnaam. .TP \fBENAMETOOLONG\fP Een padnaam, of een deel van een padnaam, was te lang. .TP \fBENOENT\fP Het genoemde bestand bestaat niet. .TP \fBENOMEM\fP Onvoldoende kernelgeheugen voorhanden. .TP \fBENOTDIR\fP Een deel van het pad\-voorvoegsel is geen map. .PP De volgende extra fouten kunnen optreden voor \fBreadlinkat\fP(): .TP \fBEBADF\fP \fImapbi\fP is geen geldige bestandindicator. .TP \fBENOTDIR\fP \fIpadnaam\fP is relatief en \fImapbi\fP is een bestandsindicatoor die naar een bestand wijst die geen map is. .SH VERSIES \fBreadlinkat\fP() is toegevoegd aan Linux in kernel 2.6.16; bibliotheek ondersteuning werd toegevoegd aan glibc in versie 2.4. .SH "VOLDOET AAN" \fBreadlink\fP(): 4.4BSD (\fBreadlink\fP() verscheen voor het eerst in 4.2BSD), POSIX.1\-2001, POSIX.1\-2008. .PP \fBreadlinkat\fP(): POSIX.1\-2008. .SH OPMERKINGEN In de versies van glibc tot en met glibc 2.4 was het uitvoer type van \fBreadlink\fP() gedeclareerd als \fIint\fP. Tegenwoordig is het uitvoer type gedeclareerd als \fIssize_t\fP, als (nieuw) vereist in POSIX.1\-2001. .PP Gebruik van een buffer met een statische grootte kan niet genoeg ruimte opleveren voor de inhoud van de symbolische koppeling. De vereiste grootte van de buffer kan worden verkregen van de \fIstat_st_size\fP waarde zoals teruggegeven door \fBlstat\fP(2) op de koppeling. Echter moet het aantal door \fBreadlink\fP() en \fBreadlinkat\fP() geschreven bytes gecontroleerd worden om er van zeker te zijn dat de grootte van de symbolische koppeling niet toenam tussen de twee aanroepen in. Het dynamisch toewijzen van de buffer voor \fBreadlink\fP() en \fBreadlinkat\fP() adresseert ook een vaak voorkomend portabiliteit probleem bij het gebruik van \fBPATH_MAX\fP voor de buffer grootte, omdat deze constante niet gegarandeerd gedefinieerd wordt conform POSIX als het systeem niet deze limiet heeft. .SS Glibc\-opmerkingen Op ouder kernels waar \fBreadlinkat\fP() niet beschikbaar is valt de glibc omwikkel functie terug op het gebruik van \fBreadlink\fP(). Wanneer \fIpadnaam\fP een relatieve padnaam is dan construeert glibc een padnaam gebaseerd op de symbolische koppeling in \fI/proc/self/fd\fP die overeenkomt met het \fIdirfd\fP argument. .SH VOORBEELDEN Het volgende programma wijst de door \fBreadlink\fP() benodigde buffer dynamisch toe aan de hand van de informatie voorzien door \fBlstat\fP(2), met terug vallende naar een buffer van \fBPATH_MAX\fP grootte in die gevallen waar \fBlstat\fP(2) een grootte van nul meldt. .PP .EX #include #include #include #include #include #include int main(int argc, char *argv[]) { struct stat sb; char *buf; ssize_t nbytes, bufsiz; if (argc != 2) { fprintf(stderr, "Usage: %s \en", argv[0]); exit(EXIT_FAILURE); } if (lstat(argv[1], &sb) == \-1) { perror("lstat"); exit(EXIT_FAILURE); } /* Tel een op bij de grootte van de koppeling, zodat we kunnen bepalen of de buffer teruggegeven door readlink() werd afgekapt. */ bufsiz = sb.st_size + 1; /* Een aantal magische koppelingen onder (bijvoorbeeld) /proc and /sys rapporteren \(aqst_size\(aq als nul. In dat geval, gebruik PATH_MAX als een "goed genoeg" schatting. */ if (sb.st_size == 0) bufsiz = PATH_MAX; buf = malloc(bufsiz); if (buf == NULL) { perror("malloc"); exit(EXIT_FAILURE); } nbytes = readlink(argv[1], buf, bufsiz); if (nbytes == \-1) { perror("readlink"); exit(EXIT_FAILURE); } printf("\(aq%s\(aq points to \(aq%.*s\(aq\en", argv[1], (int) nbytes, buf); /* Als de teruggegeven waarde gelijk was aan de buffer grootte, dan was het koppeling doel groter dan verwacht (misschien omdat het het doel werd verandert tussen de aanroep van lstat() en de aanroep van readlink()). Waarschuw de gebruiker dat de teruggegeven waarde kan zijn afgebroken. */ if (nbytes == bufsiz) printf("(Returned buffer may have been truncated)\en"); free(buf); exit(EXIT_SUCCESS); } .EE .SH "ZIE OOK" \fBreadlink\fP(1), \fBlstat\fP(2), \fBstat\fP(2), \fBsymlink\fP(2), \fBrealpath\fP(3), \fBpath_resolution\fP(7), \fBsymlink\fP(7) .SH COLOFON Deze pagina is onderdeel van release 5.10 van het Linux \fIman\-pages\fP\-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op \%https://www.kernel.org/doc/man\-pages/ te vinden. .SH VERTALING De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema , Mario Blättermann en Luc Castermans . Deze vertaling is vrije documentatie; lees de .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID. Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar .MT debian-l10n-dutch@lists.debian.org .ME .