.\" -*- coding: UTF-8 -*-
.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
.\"             and Copyright (C) 1993 Michael Haardt, Ian Jackson.
.\" and Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Modified Sat Jul 24 13:35:59 1993 by Rik Faith <faith@cs.unc.edu>
.\" Modified Sun Nov 28 17:19:01 1993 by Rik Faith <faith@cs.unc.edu>
.\" Modified Sat Jan 13 12:58:08 1996 by Michael Haardt
.\"   <michael@cantor.informatik.rwth-aachen.de>
.\" Modified Sun Jul 21 18:59:33 1996 by Andries Brouwer <aeb@cwi.nl>
.\" 2001-12-13 added remark by Zack Weinberg
.\" 2007-06-18 mtk:
.\"    	Added details about seekable files and file offset.
.\"	Noted that write() may write less than 'count' bytes, and
.\"	gave some examples of why this might occur.
.\"	Noted what happens if write() is interrupted by a signal.
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH write 2 "2 mai 2024" "Pagini de manual de Linux 6.8" 
.SH NUME
write \- scrie într\-un descriptor de fișier
.SH BIBLIOTECA
Biblioteca C standard (\fIlibc\fP, \fI\-lc\fP)
.SH SINOPSIS
.nf
\fB#include <unistd.h>\fP
.P
\fBssize_t write(int \fP\fIfd\fP\fB, const void \fP\fIbuf\fP\fB[.\fP\fIcount\fP\fB], size_t \fP\fIcount\fP\fB);\fP
.fi
.SH DESCRIERE
\fBwrite\fP() scrie până la \fIcount\fP octeți din memoria tampon care începe la
\fIbuf\fP în fișierul la care se face referire prin descriptorul de fișier
\fIfd\fP.
.P
Numărul de octeți scriși poate fi mai mic decât \fIcount\fP dacă, de exemplu,
nu există spațiu suficient pe suportul fizic subiacent, dacă este întâlnită
limita de resurse \fBRLIMIT_FSIZE\fP (a se vedea \fBsetrlimit\fP(2)) sau dacă
apelul a fost întrerupt de un gestionar de semnal după ce a scris mai puțin
de \fIcount\fP octeți. A se vedea și \fBpipe\fP(7).
.P
Pentru un fișier care poate fi căutat (adică unul căruia i se poate aplica
\fBlseek\fP(2), de exemplu, un fișier obișnuit), scrierea are loc la poziția
fișierului, iar poziția fișierului este incrementată cu numărul de octeți
scriși efectiv. În cazul în care fișierul a fost deschis cu \fBopen\fP(2)
\fBO_APPEND\fP, poziția fișierului este mai întâi stabilită la sfârșitul
fișierului înainte de scriere. Ajustarea decalajului fișierului și operația
de scriere sunt efectuate ca un pas atomic.
.P
POSIX stipulează că un \fBread\fP(2) despre care se poate dovedi că apare după
ce un \fBwrite\fP() a fost returnat va returna noile date. Rețineți că nu toate
sistemele de fișiere sunt conforme cu POSIX.
.P
În conformitate cu POSIX.1, dacă \fIcount\fP este mai mare decât \fBSSIZE_MAX\fP,
rezultatul este definit de implementare; a se vedea NOTE pentru limita
superioară în Linux.
.SH "VALOAREA RETURNATĂ"
În caz de succes, este returnat numărul de octeți scriși. În caz de eroare,
este returnat \-1, iar \fIerrno\fP este configurată pentru a indica eroarea.
.P
Rețineți că o operație \fBwrite\fP() reușită poate transfera mai puțin de
\fIcount\fP octeți. Astfel de scrieri parțiale pot avea loc din diverse motive;
de exemplu, pentru că nu a existat spațiu suficient pe dispozitivul de disc
pentru a scrie toți octeții solicitați sau pentru că un apel \fBwrite\fP()
blocat către un soclu, conductă sau similar a fost întrerupt de un gestionar
de semnal după ce a transferat o parte, dar înainte de a transfera toți
octeții solicitați. În cazul unei scrierii parțiale, apelantul poate efectua
un alt apel \fBwrite\fP() pentru a transfera octeții rămași. Apelul ulterior
fie va transfera alți octeți, fie poate duce la o eroare (de exemplu, dacă
discul este acum plin).
.P
Dacă \fIcount\fP este zero și \fIfd\fP se referă la un fișier obișnuit, atunci
\fBwrite\fP() poate returna o stare de eșec dacă este detectată una dintre
erorile de mai jos. Dacă nu sunt detectate erori sau dacă detectarea
erorilor nu este efectuată, se returnează 0 fără a provoca alte efecte. Dacă
\fIcount\fP este zero și \fIfd\fP se referă la un alt fișier decât un fișier
obișnuit, rezultatele nu sunt specificate.
.SH ERORI\-IEȘIRE
.TP 
\fBEAGAIN\fP
Descriptorul de fișier \fIfd\fP se referă la un alt fișier decât un soclu și a
fost marcat ca fiind fără blocare (\fBO_NONBLOCK\fP), iar scrierea s\-ar
bloca. Consultați \fBopen\fP(2) pentru mai multe detalii privind marcajul
\fBO_NONBLOCK\fP.
.TP 
\fBEAGAIN\fP sau \fBEWOULDBLOCK\fP
.\" Actually EAGAIN on Linux
Descriptorul de fișier \fIfd\fP se referă la un soclu și a fost marcat ca fiind
fără blocare (\fBO_NONBLOCK\fP), iar scrierea s\-ar bloca. POSIX.1\-2001 permite
returnarea oricărei erori în acest caz și nu solicită ca aceste constante să
aibă aceeași valoare, astfel încât o aplicație portabilă ar trebui să
verifice ambele posibilități.
.TP 
\fBEBADF\fP
\fIfd\fP nu este un descriptor de fișier valid sau nu este deschis pentru
scriere.
.TP 
\fBEDESTADDRREQ\fP
\fIfd\fP se referă la o priză de datagramă pentru care nu a fost definită o
adresă de mașină partener folosind \fBconnect\fP(2).
.TP 
\fBEDQUOT\fP
Cota utilizatorului de blocuri de disc pe sistemul de fișiere care conține
fișierul menționat de \fIfd\fP a fost epuizată.
.TP 
\fBEFAULT\fP
\fIbuf\fP se află în afara spațiului dvs. de adrese accesibil.
.TP 
\fBEFBIG\fP
S\-a încercat scrierea unui fișier care depășește dimensiunea maximă a
fișierului definită de implementare sau limita de dimensiune a fișierului
procesului sau scrierea la o poziție care depășește decalajul maxim permis.
.TP 
\fBEINTR\fP
Apelul a fost întrerupt de un semnal înainte ca orice date să fie scrise; a
se vedea \fBsignal\fP(7).
.TP 
\fBEINVAL\fP
\fIfd\fP este atașat unui obiect care nu este adecvat pentru scriere; sau
fișierul a fost deschis cu fanionul \fBO_DIRECT\fP, iar adresa specificată în
\fIbuf\fP, valoarea specificată în \fIcount\fP sau poziția fișierului nu este
aliniată corespunzător.
.TP 
\fBEIO\fP
.\" commit 088737f44bbf6378745f5b57b035e57ee3dc4750
S\-a produs o eroare I/O de nivel scăzut în timpul modificării
nodului\-i. Această eroare poate fi legată de scrierea înapoi (write\-back) a
datelor scrise de o operație \fBwrite\fP() anterioară, care poate să fi fost
emisă către un descriptor de fișier diferit pe același fișier. Începând cu
Linux 4.13, erorile de la write\-back vin cu promisiunea că acestea \fIpot\fP fi
raportate de următoarele. \fBwrite\fP(), și \fIwill\fP să fie raportate de o
cerere ulterioară \fBfsync\fP(2) (indiferent dacă au fost sau nu raportate și
de \fBwrite\fP()). O altă cauză a \fBEIO\fP pe sistemele de fișiere în rețea este
atunci când un blocaj consultativ a fost luat pe descriptorul de fișier și
acest blocaj a fost pierdut. Consultați secțiunea \fIBlocări pierdute\fP din
\fBfcntl\fP(2) pentru detalii suplimentare.
.TP 
\fBENOSPC\fP
Dispozitivul care conține fișierul la care se face referire prin \fIfd\fP nu
are spațiu pentru date.
.TP 
\fBEPERM\fP
Operația a fost împiedicată de o sigilare de fișier; a se vedea \fBfcntl\fP(2).
.TP 
\fBEPIPE\fP
\fIfd\fP este conectat la o conductă sau un soclu al cărui capăt de citire este
închis.  Atunci când acest lucru se întâmplă, procesul de scriere va primi
și un semnal \fBSIGPIPE\fP; (astfel, valoarea de returnare a scrierii este
văzută numai dacă programul captează, blochează sau ignoră acest semnal).
.P
Pot apărea și alte erori, în funcție de obiectul conectat la \fIfd\fP.
.SH STANDARDE
POSIX.1\-2008.
.SH ISTORIC
.\" SVr4 documents additional error
.\" conditions EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO, or ERANGE.
SVr4, 4.3BSD, POSIX.1\-2001.
.P
Sub SVr4, o scriere poate fi întreruptă și se poate returna \fBEINTR\fP în
orice moment, nu doar înainte ca datele să fie scrise.
.SH NOTE
O returnare cu succes de la \fBwrite\fP() nu garantează în niciun fel că datele
au fost stocate pe disc. Pe unele sisteme de fișiere, inclusiv NFS, nu
garantează nici măcar că spațiul a fost rezervat cu succes pentru date. În
acest caz, unele erori pot fi amânate până la o viitoare operație
\fBwrite\fP(), \fBfsync\fP(2) sau chiar \fBclose\fP(2). Singura modalitate de a fi
siguri este să apelați \fBfsync\fP(2) după ce ați terminat de scris toate
datele.
.P
Dacă o operație \fBwrite\fP() este întreruptă de un gestionar de semnal înainte
de scrierea oricărui octet, apelul eșuează cu eroarea \fBEINTR\fP; dacă este
întrerupt după scrierea a cel puțin un octet, apelul reușește și returnează
numărul de octeți scriși.
.P
.\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69
Pe Linux, \fBwrite\fP() (și apelurile de sistem similare) va transfera cel mult
0x7ffff000 (2.147.479.552) octeți, returnând numărul de octeți transferați
efectiv;(acest lucru este valabil atât pe sistemele pe 32 de biți, cât și pe
cele pe 64 de biți).
.P
O valoare returnată de eroare în timpul executării \fBwrite\fP() folosind I/O
direct nu înseamnă că întreaga scriere a eșuat. Se pot scrie date parțiale,
iar datele de la poziția fișierului pe care s\-a încercat \fBwrite\fP() trebuie
considerate inconsistente.
.SH ERORI
În conformitate cu POSIX.1\-2008/SUSv4 secțiunea XSI 2.9.7 („Interacțiuni ale
firelor de execuție cu operațiile fișierelor obișnuite”):
.P
.RS 4
Toate funcțiile următoare trebuie să fie atomice una față de cealaltă în
efectele specificate în POSIX.1\-2008 atunci când operează cu fișiere
obișnuite sau legături simbolice: ...
.RE
.P
.\" http://thread.gmane.org/gmane.linux.kernel/1649458
.\"    From: Michael Kerrisk (man-pages <mtk.manpages <at> gmail.com>
.\"    Subject: Update of file offset on write() etc. is non-atomic with I/O
.\"    Date: 2014-02-17 15:41:37 GMT
.\"    Newsgroups: gmane.linux.kernel, gmane.linux.file-systems
.\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4
.\"    Author: Linus Torvalds <torvalds@linux-foundation.org>
.\"    Date:   Mon Mar 3 09:36:58 2014 -0800
.\"
.\"        vfs: atomic f_pos accesses as per POSIX
Printre API\-urile enumerate ulterior sunt \fBwrite\fP() și \fBwritev\fP(2). Iar
printre efectele care ar trebui să fie atomice între fire (și procese) se
numără actualizările poziției fișierului.  Cu toate acestea, înainte de
Linux 3.14, acest lucru nu se întâmpla: dacă două procese care împart o
descriere de fișier deschis (a se vedea \fBopen\fP(2)) efectuează o operație
\fBwrite\fP() (sau \fBwritev\fP(2)) în același timp, atunci operațiile I/O nu erau
atomice în ceea ce privește actualizarea poziției fișierului, având ca
rezultat suprapunerea (incorectă) a blocurilor de date emise de cele două
procese. Această problemă a fost rezolvată în Linux 3.14.
.SH "CONSULTAȚI ȘI"
\fBclose\fP(2), \fBfcntl\fP(2), \fBfsync\fP(2), \fBioctl\fP(2), \fBlseek\fP(2), \fBopen\fP(2),
\fBpwrite\fP(2), \fBread\fP(2), \fBselect\fP(2), \fBwritev\fP(2), \fBfwrite\fP(3)
.PP
.SH TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de
Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
.
.PP
Această traducere este documentație gratuită; citiți
.UR https://www.gnu.org/licenses/gpl-3.0.html
Licența publică generală GNU Versiunea 3
.UE
sau o versiune ulterioară cu privire la condiții privind drepturile de autor.
NU se asumă NICIO RESPONSABILITATE.
.PP
Dacă găsiți erori în traducerea acestui manual,
vă rugăm să trimiteți un e-mail la
.MT translation-team-ro@lists.sourceforge.net
.ME .