Provided by:
manpages-it_2.80-3_all 
NOME
write - Scrive su un descrittore di file
SINTASSI
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
DESCRIZIONE
write() scrive fino a count byte contenuti in buf nel descrittore di
file fd.
Il numero di byte scritti potrebbe essere meno di count se, per
esempio, non c’è spazio sufficiente sul supporto fisico sottostante, o
se si raggiunge il limite della risorsa RLIMIT_FSIZE (vedere
setrlimit(2)), o se la chiamata è stata interrotta da un handler di
segnale dopo che ha scritto meno di count byte (vedere anche pipe(7).)
Per un file che si può spostare (cioè un file a cui si può applicare
lseek(2), per esempio un file normale), la scrittura viene eseguita
all’offset del file attuale, e l’offset del file viene incrementato dal
numero di byte attualmente scritti. Se il file è stato aperto da
open(2) con O_APPEND, 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 in modo minuzioso.
POSIX richiede che una read(2) avvenuta dopo l’esecuzione di una
write() restituisca i nuovi dati. Notare che non tutti i file system
sono conformi a POSIX.
VALORI RESTITUITI
Se è andato tutto bene, la funzione restituisce il numero di byte
scritti (zero indica che non è stato scritto nulla). In caso di errore
viene restituito -1 , e errno viene impostato di conseguenza.
Se count è zero, e fd fa riferimento ad un file normale, write()
potrebbe terminare con un errore se viene rilevato uno degli errori
descritti sotto. Se non vengono rilevati errori, restituisce 0 senza
causare altri effetti. Se count è zero e fd fa riferimento ad un file
diverso da quelli normali, i risultati non sono specificati.
ERRORI
EAGAIN Il descrittore di file fd è stato marcato come non bloccante
usando O_NONBLOCK e la scrittura verrà bloccata.
EBADF fd non è un decrittore di file valido o non è aperto in
scrittura.
EFAULT buf è al di fuori del proprio spazio di indirizzamento
accessibile.
EFBIG È stato fatto un tentativo di scrivere un file che supera la
massima dimensione del file o il limite di dimensione del file
del processo definito dall’implementazione, o di scrivere ad una
posizione successiva al massimo offset permesso.
EINTR La chiamata è stata interrotta da un segnale prima che sia stato
scritto qualunque dato.
EINVAL fd è attaccato a un oggetto su cui non si può scrivere; o il
file è stato aperto con il flag O_DIRECT, e l’indirizzo
specificato in buf, o il valore specificato in count, o l’offset
del file corrente non è correttamente allineato.
EIO Un errore I/O di basso livello è accaduto mentre si modificava
l’inode.
ENOSPC Il dispositivo contenente il file a cui fa riferimento fd non ha
spazio per i dati.
EPIPE fd è connesso a una pipe o un socket la cui lettura è chiusa.
Quando ciò accade il processo di scrittura riceverà anche un
segnale SIGPIPE. (Quindi il valore restituito in scrittura è
visto solo se il programma intercetta, blocca o ignora questo
segnale).
Possono accadere altri errori, in funzione dell’oggetto connesso a fd.
CONFORME A
SVr4, 4.3BSD, POSIX.1-2001.
Sotto SVr4 una scrittura può essere interrotta in qualsiasi punto e
restituire EINTR, non solo prima che venga scritto un dato.
NOTE
Un ritorno con successo da write() non dà alcuna garanzia che i dati
siano stati trasferiti sul disco. Infatti in alcune implementazioni
errate, esso non garantisce che questo spazio sia stato riservato per i
dati con successo. Il solo modo per essere sicuri è di chiamare
fsync(2) dopo che si è eseguita la scrittura di tutti i propri dati.
Se una scrittura con write() viene interrotta da un handler di segnale
prima che venga scritto qualunque byte, la chiamata fallisce con
l’errore EINTR; se viene interrotta dopo aver scritto almeno un byte,
la chiamata ha successo e restituisce il numero di byte scritti.
VEDERE ANCHE
close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), pwrite(2),
read(2), select(2), writev(2), fwrite(3)