NAVN
- Provided by: manpages-da-dev (Version: 4.31.0-1)
- Source: manpages-l10n
- Report a bug
C-standardbibliotek (libc, -lc)
#include <unistd.h>
ssize_t write(size_t count;
int fd, const void buf[antal], size_t antal);
write() skriver op til antal byte fra bufferen startende ved buf til filen refereret af fildeskriptoren fd.
Antallet af byte skrevet kan være mindre end antal hvis, for eksempel, der er utilstrækkelig plads på det underliggende fysiske medie, eller ressourcebegrænsningen RLIMIT_FSIZE rammes (se setrlimit(2)), eller kaldet blev afbrudt af en signalhåndtering efter der er skrevet mindre end antal byte. (Se også pipe(7).)
For en søgbar fil (dvs., en hvorpå lseek(2) kan anvendes, for eksempel en normal fil) sker skrivning ved filforskydningen, og filforskydningen øges trinvis med antallet af faktisk skrevne byte. Hvis filen var open(2)ed (åbnet) med O_APPEND, placeres filforskydningen først i slutningen af filen før skrivning. Justeringen af filforskydningen og skrive-operationen udføres som et atomar trin.
POSIX kræver at read(2), der er opstået efter en write(), har returneret de nye data. Bemærk at ikke alle filsystemer overholder POSIX.
Jævnfør POSIX.1, hvis antal er større end SSIZE_MAX, så er resultatet implementationsdefineret; se NOTES for den øvre grænse på Linux.
Ved succes, antallet af bye skrevet returneres. Ved fejl, -1 returneres og errno angives for at indikere fejlen.
Bemærk at en succesfuld write() kan overføre færre end antal byte. Sådanne delvise skrivninger kan opstå af forskellige årsager; for eksempel fordi der var utilstrækkelig plads på diskenheden til at skrive alle de anmodte byte, eller fordi en blokeret write() til en sokkel, datakanal eller lignende blev afbrudt af en signalhåndtering efter denne havde overført nogle, men før alle de anmodte byte var overført. I tilfælde af en delvis skrivning, kan kalderen lave endnu et write()-kald for at overføre de tilbageværende byte. Det følgende kald vil enten overføre yderligere byte eller medføre en fejl (f.eks. hvis disken nu er fyldt op).
Hvis antal er nul og fd referer til en normal fil, så kan write() returnere en fejlstatus hvis en af fejlene nedenfor registreres. Hvis ingen fejl registreres, eller fejlregistrering ikke udføres, så returneres 0 uden at have nogen anden effekt. Hvis antal er nul og fd refererer til en fil udover en normal fil, så angives resultaterne ikke.
Andre fejl kan opstå, afhængig af objektet forbundet til fd.
POSIX.1-2024.
SVr4, 4.3BSD, POSIX.1-2001.
Under SVr4 kan en skrivning blive afbrudt og returnere EINTR på ethvert punkt, ikke kun lige før data skrives.
En succesfuld returnering fra write() sikrer ikke, at data er blevet overført til disken. På nogle filsystemer, inklusive NFS, garanterer det end ikke at plads er blevet reserveret for dataene. I dette tilfælde, kan nogle fejl blive forsinket indtil en fremtidig write(), fsync(2), eller endda close(2). Den eneste måde at være sikker er at kalde fsync(2), efter du har skrevet alle dine data.
Hvis en write() afbrydes af en signalhåndtering før byte skrives, så fejler kaldet med fejlbeskeden EINTR; hvis den afbrydes efter at mindst en byte er blevet skrevet, så lykkes kaldet og returnerer antallet af byte skrevet.
På Linux vil write() (og lignende systemkald) overføre højest 0x7ffff000 (2.147.479.552) byte, returnerende det faktiske antal overførte byte. (Dette sker på både 32-bit og 64-bit systemer).
En fejlreturværdi under udførelse af write() via direkte I/O betyder ikke at hele skrivningen er fejlet. Delvise data kan være skrevet og dataene ved filforskydningen hvorpå write() blev forsøgt skal anses for at være inkonsistente.
Jævnfør POSIX.1-2008/SUSv4 sektion XSI 2.9-7 (»Thread Interactions with Regular File Operations«):
Blandt API'eren efterfølgende vist er write() og writev(2). Og blandt effekterne der skal være atomare på tværs af tråde (og processer) er opdateringer af filforskydningen. Før Linux 3.14 var dette dog ikke tilfældet: hvis to processer, der deler en åben filbeskrivelse (se open(2)) udføre en write() (eller writev(2)) på samme tid, så var I/O-operationerne ikke atomare i forhold til at opdatere filforskydningen, med det resultat, at blokkene med dataresultaterne fra de to processer kan (ukorrekt) overlappe hinanden. Dette problem blev løst i Linux 3.14.
close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), pwrite(2), read(2), select(2), writev(2), fwrite(3)
Oversættere af denne manual til dansk Joe Hansen <joedalton2@yahoo.dk>
Denne oversættelse er gratis dokumentation; læs GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR.
Hvis du støder på fejl i oversættelsen af denne vejledning, skal du sende en besked til debian-l10n-danish@lists.debian.org.