.\" -*- 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. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" @(#)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 "5 februari 2023" "Linux man\-pagina's 6.03" .SH NAAM readlink, readlinkat \- lees waarde van een symbolische koppeling .SH BIBLIOTHEEK Standard C bibliotheek (\fIlibc\fP, \fI\-lc\fP) .SH SAMENVATTING .nf \fB#include \fP .PP \fBssize_t readlink(const char *restrict \fP\fIpadnaam\fP\fB, char *restrict \fP\fIbuf\fP\fB,\fP \fB size_t \fP\fIbufmaat\fP\fB);\fP .PP \fB#include \fP/* Definitie van of \fBAT_*\fP constanten */ \fB#include \fP .PP \fBssize_t readlinkat(int \fP\fIdirfd\fP\fB, const char *restrict \fP\fIpadnaam\fP\fB,\fP \fB char *restrict \fP\fIbuf\fP\fB, size_t \fP\fIbufmaat\fP\fB);\fP .PP .fi .RS -4 Feature Test Macro´s eisen in glibc (zie \fBfeature_test_macros\fP(7)): .RE .PP \fBreadlink\fP(): .nf .\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L || /* glibc <= 2.19: */ _BSD_SOURCE .fi .PP \fBreadlinkat\fP(): .nf Vanaf glibc 2.10: _POSIX_C_SOURCE >= 200809L Voor glibc 2.10: _ATFILE_SOURCE .fi .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 (stilzwijgend) 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 \fBEBADF\fP (\fBreadlinkat\fP()) \fIpathname\fP is relatief maar \fIdirfd\fP is noch \fBAT_FDCWD\fP noch een geldige bestandsindicator. .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. .TP \fBENOTDIR\fP \fIpadnaam\fP is relatief en \fImapbi\fP is een bestandsindicator die naar een bestand wijst dat geen map is. .SH VERSIES \fBreadlinkat\fP() is toegevoegd aan Linux 2.6.16; bibliotheek ondersteuning werd toegevoegd aan glibc 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 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 .\" SRC BEGIN (readlink.c) .EX #include #include #include #include #include int main(int argc, char *argv[]) { char *buf; ssize_t nbytes, bufsiz; struct stat sb; 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 \[aq]st_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); } /* Toon alleen \(aqnbytes\(aq of \(aqbuf\(aq, het bevat geen afsluitend null byte (\(aq\e0\(aq). */ printf("\(aq%s\[aq] wijst naar \(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 .\" SRC END .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) .PP .SH VERTALING De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema , Mario Blättermann en Luc Castermans . .PP 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. .PP Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar .MT debian-l10n-dutch@lists.debian.org .ME .