Provided by: manpages-nl-dev_4.27.0-1_all bug

NAAM

       write - schrijf naar een bestandsindicator

BIBLIOTHEEK

       Standard C bibliotheek  (libc, -lc)

SAMENVATTING

       #include <unistd.h>

       ssize_t write(int fd, const void buf[.count], size_t tel);

BESCHRIJVING

       write() schrijft tot tel bytes naar het bestand waar bi naar wijst, van de buffer die begint op buf.

       Het  aantal  geschreven  bytes kan kleiner zijn dan tel als bijvoorbeeld er onvoldoende ruimte was op het
       onderliggende fysieke medium, of als de RLIMIT_FSIZE hulpbron limiet werd bereikt (zie setrlimit(2)),  of
       als  de aanroep werd geïnterrumpeerd door een signaal nadat het minder dan tel bytes geschreven had. (Zie
       ook pipe(7).)

       In een doorzoekbaar bestand (m.a.w. een op welk lseek(2) toegepast kan worden, bijvoorbeeld een  regulier
       bestand)  wordt  geschreven  aan  de  bestandspositie, en de positie wordt verhoogd met het daadwerkelijk
       geschreven aantal bytes. Als het bestand geopen(2)d werd met O_APPEND. dan wordt de bestandspositie eerst
       gezet op het einde van het bestand voor schrijven. De aanpassing van de  bestandspositie  en  de  schrijf
       operatie worden in een ondeelbare stap gedaan.

       POSIX eist dat een read(2) die bewijsbaar na een write() plaatsvindt de nieuwe gegevens oplevert. Merk op
       dat niet alle bestandsystemen voldoen aan POSIX.

       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 geschreven bytes teruggegeven. Bij falen  wordt  -1  teruggegeven  en  errno
       wordt overeenkomstig gezet.

       Merk  op  dat  een  succesvolle  write()  ook minder dan tel bytes kan overdragen. Zulke partiële schrijf
       resultaten kunnen optreden door diverse redenen; bij voorbeeld, omdat er niet genoeg ruimte op het schijf
       apparaat was om alle gevraagde bytes te schrijven, of omdat een geblokkeerde  write()  naar  een  socket,
       pijp,  of  vergelijkbaar  werd  onderbroken  door  een  signaal  nadat het enkele, maar voor dat het alle
       gevraagde bytes had geschreven. Als zulk een  partieel schrijf resultaat optreedt dan  kan  de  aanroeper
       een  andere write() aanroepen om de resterende bytes over te dragen. Deze aanroep kan de resterende bytes
       overdragen of resulteren in een fout (b.v. de schijf is nu vol).

       Als tel nul is en bi wijst naar een normaal bestand dan kan write() een fout status  teruggeven  als  een
       van de hieronder gegeven fouten werd gedetecteerd. Als een fouten worden gedetecteerd of fout detectie is
       niet  gedaan,  dan  wordt  0  teruggegeven zonder enig andere effect te veroorzaken. Als tel nul is en bi
       wijst naar een bestand  anders dan een regulier bestand, dan zijn de resultaten onbepaald.

FOUTEN

       EAGAIN De file beschrijving bi wijst naar  een  ander  bestand  dan  een  socket  en  is  gemarkeerd  als
              niet-blokkerend  (O_NONBLOCK),  en de schrijf aanroep zou blokkeren. Zie open(2) voor meer details
              over de O_NONBLOCK vlag.

       EAGAIN of EWOULDBLOCK
              De file beschrijving bi wijst naar  een  ander  bestand  dan  een  socket  en  is  gemarkeerd  als
              niet-blokkerend  (O_NONBLOCK),  en de schrijf aanroep zou blokkeren. Zie open(2) voor meer details
              over de O_NONBLOCK vlag.  POSIX.1-2001 staat toe in dit geval een fout terug te geven, en  vereist
              niet dat deze constanten dezelfde waarde hebben, daarom moet een overdraagbare applicatie op beide
              mogelijkheden controleren.

       EBADF  bi is geen geldige bestandsindicator, of is niet open voor lezen.

       EDESTADDRREQ
              bi  wijst naar een datagram socket waarvoor een gelijk adres niet ingesteld werd gebruikmakend van
              connect(2).

       EDQUOT De quota van de gebruiker van  schijf  blokken  op  het  bestandssysteem  bevattende  het  bestand
              aangewezen door bi is opgebruikt.

       EFAULT buf ligt buiten de door u toegankelijke adres ruimte.

       EFBIG  Een  poging  werd  ondernomen  om  een  bestand te schrijven dat de implementatie-bepaalde maximum
              bestand grootte of een proces bestand grootte limiet overschrijd, of naar een  schrijf  actie  bij
              een positie voorbij de maximaal toegestane positie.

       EINTR  De aanroep werd onderbroken door een signaal voordat gegevens werden geschreven; zie signal(7).

       EINVAL bi is gekoppeld aan een object dat ongeschikt is om naar te schrijven; of het bestand werd geopend
              met  de  O_DIRECT  vlag,  en ofwel het opgegeven adres in buf, de waarde opgegeven in count, of de
              bestandspositie is niet goed opgelijnd.

       EIO    Een laag-niveau Invoer/Uitvoer fout trad op  terwijl  de  inode  veranderd  werd.  Deze  fout  kan
              gerelateerd  zijn  aan een schrijf-terug van gegevens geschreven door een eerdere write(), die kan
              zijn gedaan via een andere bestandsbeschrijving op hetzelfde  bestand.  Vanaf  Linux  4.13,  komen
              fouten van een schrijf-terug terug met de belofte dat ze gerapporteerd kunnen worden door volgende
              write()   aanroepen  en  worden  gerapporteerd  door  een  volgende  fsync(2)  (al  dan  niet  ook
              gerapporteerd door write()). Een alternatief geval van EIO op netwerk bestandssystemen is  wanneer
              een  geadviseerde  lock  werd verwijderd op de bestandsbeschrijving en als die lock verloren werd.
              Zie de Verloren Locks sectie van fcntl(2) voor meer details.

       ENOSPC Het apparaat dat het bestand bevat waar bi naar wijst heeft geen ruimte voor de gegevens.

       EPERM  De operatie werd voorkomen door een bestandszegel; zie fcntl(2).

       EPIPE  bi is verbonden met een pijp of socket waarvan de lees-uitgang gesloten is.  Wanneer  dit  gebeurd
              ontvangt  het  schrijvende  proces een SIGPIPE signaal; (Dus, de uitvoer waarde van de write wordt
              alleen gezien als het programma het signaal ontvangt, blokkeert of negeert.)

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

VOLDOET AAN

       POSIX.1-2008.

GESCHIEDENIS

       SVr4, 4.3BSD, POSIX.1-2001.

       Under SVr4 kan een write op elk punt onderbroken worden en EINTR teruggeven, niet  alleen  voordat  enige
       gegevens zijn geschreven.

OPMERKINGEN

       Een  succesvolle  terugkeer uit write() is geen garantie dat de gegevens zijn toegekend aan de schijf. Op
       sommige bestandssystemen, inclusief NFS, is  het  zelfs  geen  garantie  dat  de  ruimte  succesvol  werd
       gereserveerd  voor  de gegevens. In dit geval, kunnen sommige fouten worden vertraagd tot een toekomstige
       write(), fsync(2), of zelfs close(2). De enige manier om zeker te zijn is door fsync(2)  aan  te  roepen,
       nadat u klaar bent met het schrijven van alle gegevens.

       Als  een  write()  werd  onderbroken  door  een signaal voordat enige bytes werden geschreven, dan zal de
       aanroep falen met de fout EINTR; als hij werd onderbroken nadat op zijn minst een byte  werd  geschreven,
       dan is de aanroep succesvol, en retourneert het aantal geschreven bytes.

       Op  Linux  zal  write()  (en  vergelijkbare  systeem aanroepen) maximaal 0x7ffff000 (2,147,479,552) bytes
       overdragen, en het daadwerkelijk aantal geschreven bytes retourneren. (Dit is waar voor zowel 32-bit  als
       64-but systemen.)

       Een  foutmelding  gedurende  het  uitvoeren van write() onder gebruik van directe Invoer/Uitvoer betekent
       niet dat de volledige schrijf actie faalde. Een deel van de gegevens kan zijn geschreven en  de  gegevens
       op de bestandspositie waar de write() werd geprobeerd dienen beschouwd te worden als inconsistent.

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  opeenvolgende  API´s  staan   write()  en writev(2). En tussen de effecten die atomair zouden
       moeten zijn langs threads (en processen) zijn de veranderingen in de  bestandspositie.  Echter  op  Linux
       voor  versie  3.14 was dit niet het geval: als twee processen die een open bestandsindicator deelden (zie
       open(2))  een write()  (or writev(2)) tegelijkertijd uitvoeren, dan zijn de Invoer/Uitvoer operaties niet
       atomair met betrekking tot het aanpassen van de bestandspositie, hetgeen kan  resulteren  in  het  kunnen
       overlappen  van  de gegevens blokken zoals geschreven door beide processen. Dit probleem werd opgelost in
       Linux 3.14.

ZIE OOK

       close(2), fcntl(2), fsync(2), ioctl(2), lseek(2),  open(2),  pwrite(2),  read(2),  select(2),  writev(2),
       fwrite(3)

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.9.1                           2 mei 2024                                           write(2)