Provided by: manpages-nl-dev_4.13-4_all bug

NAAM

       readlink, readlinkat - lees waarde van een symbolische koppeling

SAMENVATTING

       #include <unistd.h>

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

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

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

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

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

       readlinkat():
           Vanaf glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Vóór 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 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).)

       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.

       De volgende extra fouten kunnen optreden voor readlinkat():

       EBADF  mapbi is geen geldige bestandsindicator.

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

VERSIES

       readlinkat()  is  toegevoegd  aan  Linux  in kernel 2.6.16; bibliotheek ondersteuning werd toegevoegd aan
       glibc in versie 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

       In de versies van glibc 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 <sys/types.h>
       #include <sys/stat.h>
       #include <limits.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

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

           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);
           }

           printf("'%s' points to '%.*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)

COLOFON

       Deze pagina is onderdeel van release 5.10 van het  Linux  man-pages-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.

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                                              9 juni 2020                                       READLINK(2)