Provided by: manpages-it_2.80-3_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)