Provided by: manpages-nl-dev_4.15.0-9_all bug

NAAM

       readlink, readlinkat - lees waarde van een symbolische koppeling

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

           /* Toon alleen 'nbytes' of 'buf', het bevat geen afsluitend
              null byte ('\0'). */
           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.13  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⟩.