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

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)