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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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 ⟨⟩.