Provided by: manpages-nl-dev_4.21.0-2_all bug

NAAM

       readlink, readlinkat - lees waarde van een symbolische koppeling

BIBLIOTHEEK

       Standard C bibliotheek  (libc, -lc)

SAMENVATTING

       #include <unistd.h>

       ssize_t readlink(const char *restrict padnaam, char *restrict buf,
                        size_t bufmaat);

       #include <fcntl.h>            /* Definitie van of AT_* constanten */
       #include <unistd.h>

       ssize_t readlinkat(int dirfd, const char *restrict padnaam,
                        char *restrict buf, size_t bufmaat);

   Feature Test Macro´s eisen in  glibc (zie feature_test_macros(7)):

       readlink():
           _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
               || /* glibc <= 2.19: */ _BSD_SOURCE

       readlinkat():
           Vanaf glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Voor glibc 2.10:
               _ATFILE_SOURCE

BESCHRIJVING

       readlink()  plaatst  de  inhoud  van  de  symbolische  koppeling padnaam in de buffer buf, die de grootte
       bufmaat heeft. readlink() voegt geen NULL byte toe aan buf. Het zal  (stilzwijgend)  de  inhoud  afkappen
       (bij de lengte van bufmaat tekens), in het geval dat de buffer te klein is om de hele inhoud te bevatten.

   readlinkat()
       De  readlinkat()  systeem  aanroep  werkt  op  exact dezelfde manier als readlink(), behalve voor de hier
       beschreven verschillen.

       Als de padnaam gegeven in padnaam relatief is, dan wordt deze geïnterpreteerd als zijnde relatief aan  de
       map  die gerefereerd wordt door de file beschrijving dirfd (in plaats van relatief aan de huidige werkmap
       van het aanroepende proces, zoals gedaan door readlink() voor een relatieve padnaam).

       Als padnaam relatief is en dirfd de speciale waarde AT_FDCWD heeft, dan wordt padnaam geïnterpreteerd als
       relatief aan de huidige werkmap van het aanroepende proces (zoals readlink()).

       Als padnaam absoluut is, dan wordt mapbi genegeerd.

       Vanaf Linux 2.6.39 mag padnaam een lege tekenreeks  zijn,  in  welk  geval  de  aanroep  uitgaat  van  de
       symbolische  koppeling  zoals aangewezen door dirfd (die moet verkregen zijn door gebruik van open(2) met
       de O_PATH en O_NOFOLLOW vlaggen).

       Zie openat(2) voor de uitleg over de noodzaak van readlinkat().

EIND WAARDE

       Bij succes, geven deze aanroepen het aantal  bytes  terug  dat  in  de  buffer  werd  geplaatst  (als  de
       teruggegeven  waarde  gelijk  is  aan  bufsiz,  dan  kan  afbreken zijn opgetreden.) Bij de fout wordt -1
       teruggegeven en wordt errno gezet om de fout aan te geven.

FOUTEN

       EACCES Zoek  toestemming  werd  geweigerd  voor  een   deel   van   het   pad   voorvoegsel.   (Zie   ook
              path_resolution(7).)

       EBADF  (readlinkat())    pathname   is   relatief   maar   dirfd   is  noch  AT_FDCWD  noch  een  geldige
              bestandsindicator.

       EFAULT buf strekt zich uit voorbij de aan het proces toegewezen adres ruimte.

       EINVAL bufmaat is niet positief.

       EINVAL Het genoemde  bestand  (m.a.w.  de  uiteindelijke  bestandsnaam  component  van  padnaam  is  geen
              symbolische koppeling.

       EIO    Een In/Uit fout trad op terwijl er van het bestandsysteem gelezen werd.

       ELOOP  Teveel symbolische koppelingen werden tegengekomen bij het vertalen van de padnaam.

       ENAMETOOLONG
              Een padnaam, of een deel van een padnaam, was te lang.

       ENOENT Het genoemde bestand bestaat niet.

       ENOMEM Onvoldoende kernelgeheugen voorhanden.

       ENOTDIR
              Een deel van het pad-voorvoegsel is geen map.

       ENOTDIR
              padnaam is relatief en mapbi is een bestandsindicator die naar een bestand wijst dat geen map is.

VERSIES

       readlinkat() is toegevoegd aan Linux 2.6.16; bibliotheek ondersteuning werd toegevoegd aan glibc 2.4.

VOLDOET AAN

       readlink(): 4.4BSD (readlink()  verscheen voor het eerst in 4.2BSD), POSIX.1-2001, POSIX.1-2008.

       readlinkat(): POSIX.1-2008.

OPMERKINGEN

       Tot  en  met  glibc  2.4  was  het  uitvoer type van readlink() gedeclareerd als int. Tegenwoordig is het
       uitvoer type gedeclareerd als ssize_t, als (nieuw) vereist in POSIX.1-2001.

       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 stat_st_size waarde
       zoals  teruggegeven door lstat(2) op de koppeling. Echter moet het aantal door readlink() en readlinkat()
       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  readlink()  en
       readlinkat()  adresseert ook een vaak voorkomend portabiliteit probleem bij het gebruik van PATH_MAX voor
       de buffer grootte, omdat deze constante niet  gegarandeerd  gedefinieerd  wordt  conform  POSIX  als  het
       systeem niet deze limiet heeft.

   Glibc-opmerkingen
       Op  ouder  kernels  waar  readlinkat()  niet  beschikbaar  is valt de glibc omwikkel functie terug op het
       gebruik van readlink(). Wanneer padnaam een relatieve  padnaam  is  dan  construeert  glibc  een  padnaam
       gebaseerd op de symbolische koppeling in /proc/self/fd die overeenkomt met het dirfd argument.

VOORBEELDEN

       Het  volgende  programma  wijst  de  door  readlink()  benodigde  buffer dynamisch toe aan de hand van de
       informatie voorzien door lstat(2), met terug vallende  naar  een  buffer  van  PATH_MAX  grootte  in  die
       gevallen waar lstat(2) een grootte van nul meldt.

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

       int
       main(int argc, char *argv[])
       {
           char         *buf;
           ssize_t      nbytes, bufsiz;
           struct stat  sb;

           if (argc != 2) {
               fprintf(stderr, "Usage: %s <padnaam>\n", 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 'st_size' 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 'nbytes' of 'buf', het bevat geen afsluitend
              null byte ('\0'). */
           printf("'%s' wijst naar '%.*s'\n", 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)\n");

           free(buf);
           exit(EXIT_SUCCESS);
       }

ZIE OOK

       readlink(1), lstat(2), stat(2), symlink(2), realpath(3), path_resolution(7), symlink(7)

VERTALING

       De  Nederlandse  vertaling  van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario
       Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

       Deze vertaling is vrije documentatie; lees  de  GNU General Public License Version 3  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 debian-l10n-
       dutch@lists.debian.org.

Linux man-pagina's 6.03                          5 februari 2023                                     readlink(2)