write(2) System Calls Manual write(2) NAVN write - skriv til en fildeskriptor BIBLIOTEK C-standardbibliotek (libc, -lc) SYNOPSIS #include ssize_t write(size_t count; int fd, const void buf[antal], size_t antal); BESKRIVELSE write() skriver op til antal byte fra bufferen startende ved buf til filen refereret af fildeskriptoren fd. Antallet af byte skrevet kan vaere mindre end antal hvis, for eksempel, der er utilstraekkelig plads pa det underliggende fysiske medie, eller ressourcebegraensningen RLIMIT_FSIZE rammes (se setrlimit(2)), eller kaldet blev afbrudt af en signalhandtering efter der er skrevet mindre end antal byte. (Se ogsa pipe(7).) For en sogbar fil (dvs., en hvorpa lseek(2) kan anvendes, for eksempel en normal fil) sker skrivning ved filforskydningen, og filforskydningen oges trinvis med antallet af faktisk skrevne byte. Hvis filen var open(2)ed (abnet) med O_APPEND, placeres filforskydningen forst i slutningen af filen for skrivning. Justeringen af filforskydningen og skrive-operationen udfores som et atomar trin. POSIX kraever at read(2), der er opstaet efter en write(), har returneret de nye data. Bemaerk at ikke alle filsystemer overholder POSIX. Jaevnfor POSIX.1, hvis antal er storre end SSIZE_MAX, sa er resultatet implementationsdefineret; se NOTES for den ovre graense pa Linux. RETURVAERDI Ved succes, antallet af bye skrevet returneres. Ved fejl, -1 returneres og errno angives for at indikere fejlen. Bemaerk at en succesfuld write() kan overfore faerre end antal byte. Sadanne delvise skrivninger kan opsta af forskellige arsager; for eksempel fordi der var utilstraekkelig plads pa diskenheden til at skrive alle de anmodte byte, eller fordi en blokeret write() til en sokkel, datakanal eller lignende blev afbrudt af en signalhandtering efter denne havde overfort nogle, men for alle de anmodte byte var overfort. I tilfaelde af en delvis skrivning, kan kalderen lave endnu et write()-kald for at overfore de tilbagevaerende byte. Det folgende kald vil enten overfore yderligere byte eller medfore en fejl (f.eks. hvis disken nu er fyldt op). Hvis antal er nul og fd referer til en normal fil, sa kan write() returnere en fejlstatus hvis en af fejlene nedenfor registreres. Hvis ingen fejl registreres, eller fejlregistrering ikke udfores, sa returneres 0 uden at have nogen anden effekt. Hvis antal er nul og fd refererer til en fil udover en normal fil, sa angives resultaterne ikke. FEJL EAGAIN Fildeskriptoren fd referer til en fil udover en sokkel og er blevet markeret ikkeblokerende (O_NONBLOCK), og skrivningen blokerer. Se open(2) for yderligere detaljer om flaget O_NONBLOCK. EAGAIN eller EWOULDBLOCK Fildeskriptoren fd referer til en sokkel og er blevet markeret ikkeblokerende (O_NONBLOCK), og skrivningen blokerer. POSIX.1-2001 tillader hverken at fejl returneres i dette tilfaelde og kraever ikke at disse konstanter har den samme vaerdi, sa et flytbart program skal tjekke for begge muligheder. EBADF fd er ikke en gyldig fildeskriptor eller er ikke aben for skrivning. EDESTADDRREQ fd referer til en datagramsokkel hvor en modpartadresse ikke er blevet angivet via connect(2). EDQUOT Brugerens kvota af diskblokke pa filsystemet indeholdende filen refereret til af fd er tom. EFAULT buf er uden for dit tilgaengelige adresserum. EFBIG Et forsog blev gjort pa at skrive en fil, der er storre end den implementationsdefinerede maksimale filstorrelse eller processens begraesning af filstorrelsen, eller der blev skrevet pa en position udover den maksimale tilladte forskydning. EINTR Kaldet blev afbrudt af et signal for data blev skrevet; se signal(7). EINVAL fd er vedhaeftet til et objekt, der ikke er egnet for skrivning; eller filen blev abnet med flaget O_DIRECT og enten den angivne adresse i buf, vaerdien angivet i antal eller filforskydningen er ikke ordentlig justeret. EIO En I/O-fejl pa lavt niveau opstod under aendring af iknuden. Denne fejl kan relatere til skriv-tilbage af data skrevet af en tidligere write(), der kan have vaeret udstedt til en anden fildeskriptor pa den samme fil. Fra og med Linux 4.13 har fejl fra skriv-tilbage en lovning (promise) om at de kan blive rapporteret efterfolgende. write()-foresporgsler vil blive rapporteret efterfolgende af en fsync(2) (uanset om de ogsa blev rapporteret af write()). Et alternativt tilfaelde af EIO pa netvaerksfilsystemer er nar en radgivende las er udlost pa fildeskriptoren og denne las er mistet. Se Lost locks-afsnittet hos fcntl(2) for yderligere detaljer. ENOSPC Enheden indeholdende filen refereret til af fd har ikke plads til dataene. EPERM Operationen blev forhindret af en filforsegling; se fcntl(2). EPIPE fd er forbundet til en datakanal eller sokkel hvis laeseafslutning er lukket. Nar dette sker vil skriveprocessen ogsa modtaget et SIGPIPE-signal. (Returvaerdien for skrivningen ses derfor kun hvis programmet bryder ned, blokeres eller ignorerer dette signal). Andre fejl kan opsta, afhaengig af objektet forbundet til fd. STANDARDER POSIX.1-2024. HISTORIK SVr4, 4.3BSD, POSIX.1-2001. Under SVr4 kan en skrivning blive afbrudt og returnere EINTR pa ethvert punkt, ikke kun lige for data skrives. NOTER En succesfuld returnering fra write() sikrer ikke, at data er blevet overfort til disken. Pa nogle filsystemer, inklusive NFS, garanterer det end ikke at plads er blevet reserveret for dataene. I dette tilfaelde, kan nogle fejl blive forsinket indtil en fremtidig write(), fsync(2), eller endda close(2). Den eneste made at vaere sikker er at kalde fsync(2), efter du har skrevet alle dine data. Hvis en write() afbrydes af en signalhandtering for byte skrives, sa fejler kaldet med fejlbeskeden EINTR; hvis den afbrydes efter at mindst en byte er blevet skrevet, sa lykkes kaldet og returnerer antallet af byte skrevet. Pa Linux vil write() (og lignende systemkald) overfore hojest 0x7ffff000 (2.147.479.552) byte, returnerende det faktiske antal overforte byte. (Dette sker pa bade 32-bit og 64-bit systemer). En fejlreturvaerdi under udforelse af write() via direkte I/O betyder ikke at hele skrivningen er fejlet. Delvise data kan vaere skrevet og dataene ved filforskydningen hvorpa write() blev forsogt skal anses for at vaere inkonsistente. FEJL Jaevnfor POSIX.1-2008/SUSv4 sektion XSI 2.9-7 (>>Thread Interactions with Regular File Operations<<): Alle de folgende funktioner skal vaere atomare med respekt for hinanden i effekterne specificeret i POSIX.1-2008 nar de arbejder pa normale filer eller symbolske henvisninger: ... Blandt API'eren efterfolgende vist er write() og writev(2). Og blandt effekterne der skal vaere atomare pa tvaers af trade (og processer) er opdateringer af filforskydningen. For Linux 3.14 var dette dog ikke tilfaeldet: hvis to processer, der deler en aben filbeskrivelse (se open(2)) udfore en write() (eller writev(2)) pa samme tid, sa 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 lost i Linux 3.14. SE OGSA close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), pwrite(2), read(2), select(2), writev(2), fwrite(3) OVERSAETTELSE Oversaettere af denne manual til dansk Joe Hansen Denne oversaettelse er gratis dokumentation; laes GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. Hvis du stoder pa fejl i oversaettelsen af denne vejledning, skal du sende en besked til . Linux man-pages 6.17 8. februar 2026 write(2)