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