Provided by: manpages-it_2.80-5_all bug

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)