.\" -*- 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 .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified Sat Jul 24 13:35:59 1993 by Rik Faith .\" Modified Sun Nov 28 17:19:01 1993 by Rik Faith .\" Modified Sat Jan 13 12:58:08 1996 by Michael Haardt .\" .\" Modified Sun Jul 21 18:59:33 1996 by Andries Brouwer .\" 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 "3 aprile 2023" "Linux man\-pages 6.05.01" .SH NOME write \- Scrive su un descrittore di file .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH SINTASSI .nf \fB#include \fP .PP \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 DESCRIZIONE \fBwrite\fP() scrive fino a \fIcount\fP byte dal buffer che inizia da \fIbuf\fP nel file a cui fa riferimento il descrittore di file \fIfd\fP. .PP Il numero di byte scritti potrebbe essere meno di \fIcount\fP se, per esempio, non c'è spazio sufficiente sul supporto fisico sottostante, o se si raggiunge il limite della risorsa \fBRLIMIT_FSIZE\fP (vedere \fBsetrlimit\fP(2)), o se la chiamata è stata interrotta da un handler di segnale dopo che ha scritto meno di \fIcount\fP byte (vedere anche \fBpipe\fP(7)). .PP Per un file che si può spostare (cioè un file a cui si può applicare \fBlseek\fP(2), per esempio un file regolare), la scrittura viene eseguita all'offset del file, e l'offset del file viene incrementato dal numero di byte effettivamente scritti. Se il file è stato aperto da \fBopen\fP(2) con \fBO_APPEND\fP, l'offset del file viene prima impostato alla fine del file, e poi scritto. La regolazione dell'offset del file e l'operazione di scrittura vengono eseguite come un'operazione atomica. .PP POSIX richiede che una chiamata \fBread\fP(2) avvenuta dopo l'esecuzione di una chiamata \fBwrite\fP() restituisca i nuovi dati. Notare che non tutti i filesystem sono conformi a POSIX. .PP Secondo POSIX.1, se \fIcount\fP è maggiore di \fBSSIZE_MAX\fP, il risultato è definito dall'implementazione; vedi NOTE per il limite superiore in Linux. .SH "VALORE RESTITUITO" Se è andato tutto bene, la funzione restituisce il numero di byte scritti. In caso di errore viene restituito \-1, e \fIerrno\fP viene impostato per indicare l'errore. .PP Si noti che una chiamata \fBwrite\fP() andata a buon fine può trasferire meno di \fIcount\fP byte. Tali scritture parziali possono avvenire per diverse ragioni; per esempio, perché lo spazio sul dispositivo del disco era insufficiente per scrivere tutti i byte richiesti, o perché una chiamata \fBwrite\fP() bloccata su un socket, una pipe, o simili è stata interrotta da un gestore di segnale dopo che aveva trasferito alcuni byte, ma prima di aver trasferito tutti quelli richiesti. Nel caso di un write parziale, il chiamante può fare un'altra chiamata a \fBwrite\fP() per trasferire i byte rimanenti. La chiamata successiva o trasferisce ulteriori byte o può determinare un errore (e.g., se il disco ora è pieno). .PP Se \fIcount\fP è zero, e \fIfd\fP fa riferimento ad un file regolare, \fBwrite\fP() può restituire uno stato di insuccesso se viene rilevato uno degli errori descritti più avanti. Se non vengono rilevati errori, o se non la rilevazione degli errori non è eseguita, restituisce 0 senza causare altri effetti. Se \fIcount\fP è zero e \fIfd\fP fa riferimento ad un file diverso da uno regolare, i risultati non sono specificati. .SH ERRORI .TP \fBEAGAIN\fP Il descrittore di file \fIfd\fP fa riferimento a un file diverso da un socket ed è stato marcato come non bloccante (\fBO_NONBLOCK\fP), e la scrittura si bloccherebbe. Vedi \fBopen\fP(2) per ulteriori dettagli sull'opzione \fBO_NONBLOCK\fP. .TP \fBEAGAIN\fP o \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux Il descrittore di file \fIfd\fP fa riferimento a un diverso da un socket ed è stato marcato come non bloccante (\fBO_NONBLOCK\fP), e la scrittura si bloccherebbe. POSIX.1\-2001 consente che venga restituito uno qualsiasi dei due errori per questo caso, e non richiede che queste costanti abbiano lo stesso valore, per cui un'applicazione portabile dovrebbe verificare entrambe le possibilità. .TP \fBEBADF\fP \fIfd\fP non è un decrittore di file valido o non è aperto in scrittura. .TP \fBEDESTADDRREQ\fP \fIfd\fP fa riferimento a un socket a datagrammi per il quale un indirizzo dello stesso livello non è stato impostato usando \fBconnect\fP(2). .TP \fBEDQUOT\fP La quota utente di blocchi del disco sul filesystem contenente il file a cui \fIfd\fP fa riferimento è esaurita. .TP \fBEFAULT\fP I bufè al di fuori del proprio spazio di indirizzamento accessibile. .TP \fBEFBIG\fP È stato fatto un tentativo di scrivere un file che supera la massima dimensione del file definita dall'implementazione o il limite di dimensione del file del processo, o di scrivere ad una posizione oltre il massimo offset consentito. .TP \fBEINTR\fP La chiamata è stata interrotta da un segnale prima che sia stato scritto qualunque dato; vedere \fBsignal\fP(7). .TP \fBEINVAL\fP \fIfd\fP è attaccato a un oggetto su cui non si può scrivere; o il file è stato aperto con l'opzione \fBO_DIRECT\fP, e l'indirizzo specificato in \fIbuf\fP, o il valore specificato in \fIcount\fP, o l'offset del file non è correttamente allineato. .TP \fBEIO\fP .\" commit 088737f44bbf6378745f5b57b035e57ee3dc4750 \fBEIO\fP Un errore I/O di basso livello è accaduto mentre si modificava l'inode. Quest'errore può riguardare il "write\-back" di dati scritti da un precedente \fBwrite\fP(), che può essere stato eseguito usando un altro descrittore di file che serviva per accedere allo stesso file. A partire da Linux 4.13, gli errori derivanti da write\-back si presentano con la speranza che \fIpossano\fP essere riportati da successive richieste di \fBwrite\fP(), e \fIverranno\fP riportati da un successivo \fBfsync\fP(2) (che siano stati riportati o no anche da \fBwrite\fP()). Un'altra causa di \fBEIO\fP su filesystem collegati in rete è quando un lock consigliato (advisory lock) era già stato scaricato sul descrittore di file e questo lock è stato perso. Si veda la sezione \fILost locks\fP di \fBfcntl\fP(2) per ulteriori dettagli. .TP \fBENOSPC\fP Il dispositivo contenente il file a cui fa riferimento \fIfd\fP non ha spazio per i dati. .TP \fBEPERM\fP L'operazione è stata impedita da una restrizione sul file; vedi \fBfcntl\fP(2). .TP \fBEPIPE\fP \fIfd\fP è connesso a una pipe o un socket la cui lettura è chiusa. Quando ciò accade il processo di scrittura riceverà anche un segnale \fBSIGPIPE\fP. (Quindi il valore restituito in scrittura è visto solo se il programma intercetta, blocca o ignora questo segnale). .PP Possono accadere altri errori, in funzione dell'oggetto connesso a \fIfd\fP. .SH STANDARDS POSIX.1\-2008. .SH STORIA .\" SVr4 documents additional error .\" conditions EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO, or ERANGE. SVr4, 4.3BSD, POSIX.1\-2001. .PP Sotto SVr4 una scrittura può essere interrotta e restituire \fBEINTR\fP in qualsiasi punto, non solo prima che venga scritto un dato. .SH NOTE Un ritorno con successo da \fBwrite\fP() non dà alcuna garanzia che i dati siano stati trasferiti sul disco. Su alcuni filesystem, compreso NFS, esso non garantisce che questo spazio sia stato riservato per i dati in modo corretto. In questo caso, alcuni errori potrebbero essere differiti fino a un futuro \fBwrite\fP(), \fBfsync\fP(2), o anche \fBclose\fP(2). Il solo modo per essere sicuri è di chiamare \fBfsync\fP(2) dopo che si è eseguita la scrittura di tutti i propri dati. .PP Se una scrittura con \fBwrite\fP() viene interrotta da un handler di segnale prima che venga scritto qualunque byte, la chiamata fallisce con l'errore \fBEINTR\fP; se viene interrotta dopo aver scritto almeno un byte, la chiamata ha successo e restituisce il numero di byte scritti. .PP .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 Su Linux, \fBwrite\fP() (e chiamate di sistema simili) trasferiranno al massimo 0x7ffff000 (2,147,479,552) byte, restituendo il numero di byte effettivamente trasferiti. (Questo è vero sia sui sistemi a 32 bit sia su quelli a 64 bit) .PP Un valore di errore restituito mentre si esegue una chiamata \fBwrite\fP() usando I/O diretto non significa che l'intera scrittura non abbia avuto successo. Possono venir scritti dati parziali e i dati all'offset del file sul quale è stata tentata la chiamata \fBwrite\fP() dovrebbe essere considerata incongruente. .SH BUG Secondo POSIX.1\-2008/SUSv4 Section XSI 2.9.7 ("Thread Interactions with Regular File Operations"): .PP .RS 4 Tutte le seguenti funzioni devono essere atomiche l'una rispetto all'altra nei risultati specificati in POSIX.1\-2008 quando esse operano su file regolari o su collegamenti simbolici: ... .RE .PP .\" http://thread.gmane.org/gmane.linux.kernel/1649458 .\" From: Michael Kerrisk (man-pages 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 .\" Date: Mon Mar 3 09:36:58 2014 -0800 .\" .\" vfs: atomic f_pos accesses as per POSIX Among the APIs subsequently listed are \fBwrite\fP() and \fBwritev\fP(2). And among the effects that should be atomic across threads (and processes) are updates of the file offset. However, before Linux 3.14, this was not the case: if two processes that share an open file description (see \fBopen\fP(2)) perform a \fBwrite\fP() (or \fBwritev\fP(2)) at the same time, then the I/O operations were not atomic with respect to updating the file offset, with the result that the blocks of data output by the two processes might (incorrectly) overlap. This problem was fixed in Linux 3.14. .SH "VEDERE ANCHE" \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 TRADUZIONE La traduzione italiana di questa pagina di manuale è stata creata da Goffredo Baroncelli , Giulio Daprelà , Elisabetta Galli e Marco Curreli . .PP Questa traduzione è documentazione libera; leggere la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Versione 3 .UE o successiva per le condizioni di copyright. Non ci assumiamo alcuna responsabilità. .PP Per segnalare errori nella traduzione di questa pagina di manuale inviare un messaggio a .MT pluto-ildp@lists.pluto.it .ME .