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

NAAM

       read - lees van een bestandbeschrijving

SAMENVATTING

       #include <unistd.h>

       ssize_t read(int bes_ind, void *buf, size_t tel);

BESCHRIJVING

       read() probeert tot aan tel bytes van bestandsbeschrijving bes_ind in te lezen naar de buffer buf.

       In  bestanden  die  zoeken  ondersteunen  begint  de  lees-operatie  bij  de bestandspositie, en wordt de
       bestandspositie verhoogd met het aantal gelezen bytes. Als de bestandspositie op of voorbij het einde van
       het bestand staat, dan worden geen bytes gelezen en geeft read() nul terug.

       Als tel nul is, kan read() fouten zoals hieronder beschreven detecteren. In afwezigheid van  enige  fout,
       of  als  read() niet op fouten controleert, zal een read() met een tel gelijk 0 een 0 teruggeven en heeft
       verder geen andere effecten.

       Volgens POSIX.1 als tel groter is dan SSIZE_MAX dan  is  het  resultaat  implementatie  afhankelijk;  zie
       OPMERKINGEN voor de boven grens op Linux.

EIND WAARDE

       Bij  success wordt het aantal gelezen bytes teruggegeven (nul betekend einde van het bestand); de positie
       in het bestand wordt met dit aantal vooruitgezet. Het is niet fout als dat  aantal  kleiner  is  dan  het
       gevraagde aantal bytes, dat kan bijvoorbeeld gebeuren als er minder bytes voorhanden zijn op dat ogenblik
       (wellicht  omdat we dicht bij eind-van-bestand zijn, omdat we van een pijp lezen, of van een terminal, of
       omdat read() onderbroken werd door een signaal). Zie ook OPMERKINGEN.

       Bij falen wordt -1 teruggegeven, en errno wordt naar behoren gezet. In dit geval is het onbepaald gelaten
       ofde plaats in het bestand (als die bestaat) veranderd.

FOUTEN

       EAGAIN De bestandsbeschrijving bes_ind refereert naar een ander bestand dan de socket  en  is  gemarkeerd
              als  niet-blokkerend  (O_NONBLOCK, en de read zou blokkeren. Zie open(2) voor meer details over de
              O_NONBLOCK vlag.

       EAGAIN of EWOULDBLOCK
              De bestandsbeschrijving bes_ind refereert naar een socket en werd gemarkeerd  als  niet-blokkerend
              (O_NONBLOCK,  en  de  read()  zou  blokkeren.  POSIX.1-2001  staat  toe  in  dit geval een fout te
              retourneren en vereist niet dat deze constanten dezelfde waarde hebben, waardoor een overdraagbare
              applicatie op beide mogelijkheden zou moeten controleren.

       EBADF  bes_ind is geen geldige bestandsbeschrijving, of is niet open voor lezen.

       EFAULT buf ligt buiten de door u toegankelijke adres ruimte.

       EINTR  De aanroep werd onderbroken door een signaal voordat enige data werd gelezen; zie signal(7).

       EINVAL bes_ind is gekoppeld aan een object dat ongeschikt is om van te lezen; of het bestand werd geopend
              met de O_DIRECT vlag en ofwel  het  adres  opgegeven  in  buf,  de  waarde  opgegeven  tel  of  de
              bestandsplaats is niet goed uitgelijnd.

       EINVAL bes_ind  werd  aangemaakt  door  een aanroep van timerfd_create(2)  en de verkeerde buffer grootte
              werd meegegeven aan read(); zie timerfd_create(2) voor meer informatie.

       EIO    Invoer/Uitvoer fout. Dit gebeurd bijvoorbeeld als  een  proces  uit  een  achtergrond-proces-groep
              probeert  van  zijn controlerende terminal te lezen en, ofwel het negeert/blokkeert SIGTTIN, ofwel
              zijn proces-groep is verweesd. Het kan ook optreden als er een laag-niveau Invoer/Uitvoer fout  is
              terwijl  er  van  schijf  of  tape  gelezen wordt. Een andere mogelijke oorzaak van EIO op netwerk
              bestandssystemen is wanneer een geadviseerd lock werd verwijderd van  de  bestandsbeschrijving  en
              dat die lock verloren raakte. Zie de Verloren locks sectie van fcntl(2) voor meer details.

       EISDIR bes_ind wijst naar een map.

       Andere fouten kunnen optreden afhankelijk van dat wat verbonden is met bi.

VOLDOET AAN

       SVr4, 4.3BSD, POSIX.1-2001.

OPMERKINGEN

       De  typen  size_t  en  ssize_t  zijn,  respectively,  gehele  getal  typen  met  of  zonder  teken  zoals
       gespecificeerd door POSIX.1.

       Op Linux zal read() (en vergelijkbare systeem aanroepen) op zijn hoogst 0x7ffff000 (2,147,479,552)  bytes
       overdragen,  en  het daadwerkelijk aantal overgedragen bytes retourneren. (Dit is waar op beide 32-bit en
       64-bit systemen.)

       Bij NFS bestandssystemen zal het lezen van kleine hoeveelheden gegevens de tijdstempel alleen  de  eerste
       keer veranderen, volgende aanroepen laten de tijdstempel onveranderd. Dit wordt veroorzaakt door bufferen
       van  bestandskenmerken  aan  de  zijde  van  de  cliënt:  de meeste -zo niet alle- NFS cliënten laten het
       bijwerken van de `atime' aan de server over; als een lees-opdracht dan genoeg heeft  aan  de  cliënt-kant
       buffer  vind  er geen lees-opdracht plaats naar de server en blijft de atime dus onveranderd. UNIX gedrag
       kan verkregen worden door het bufferen aan de zijde van de cliënt uit te schakelen, maar dat  zal  in  de
       meeste situaties de last op de server flink vergroten, en zijn prestaties  nadelig beïnvloeden.

BUGS

       Volgens POSIX.1-2008/SUSv4 Sectie XSI 2.9.7 ("Thread interacties met Reguliere Bestand Operaties"):

           Alle volgende functie zullen onderling atomair zijn  voor wat betreft de effecten die in POSIX.1-2008
           gespecificeerd zijn indien ze werken op reguliere bestanden of symbolische koppelingen: ...

       Tussen  de  achtereenvolgende  vermelde API´s staan read() en readv(2). En tussen de effecten die atomair
       zouden moeten zijn voor alle threads (en processen) zijn aanpassingen  aan  de  bestandspositie.   Echter
       vóór Linux versie 3.14 was dit niet het geval: als twee processen die een open bestandsbeschrijving delen
       (zie  open(2))  een  read()  (of  readv(2))  op  hetzelfde tijdstip uitvoeren, dan zijn de Invoer/Uitvoer
       operaties niet atomair met betrekking tot aanpassen van de bestandspositie,  hetgeen  resulteert  dat  de
       lees  acties  in  beide  processen  (foutief)  zou  kunnen  overlappen  in  de  datablokken die ze zouden
       verkrijgen. Dit probleem werd opgelost in Linux 3.14.

ZIE OOK

       close(2), fcntl(2), ioctl(2), lseek(2), open(2), pread(2), readdir(2), readlink(2), readv(2),  select(2),
       write(2), fread(3)

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                                            2 februari 2018                                         READ(2)