WRITE
Section: Linux Programmer's Manual (2)
Updated: 18 giugno 2007
Index
Return to Main Contents
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)
Index
- NOME
-
- SINTASSI
-
- DESCRIZIONE
-
- VALORI RESTITUITI
-
- ERRORI
-
- CONFORME A
-
- NOTE
-
- VEDERE ANCHE
-
This document was created by
man2html,
using the manual pages.
Time: 23:03:52 GMT, June 17, 2008