.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" This manpage is Copyright (C) 1992 Drew Eckhardt; .\" 1993 Michael Haardt, Ian Jackson. .\" and Copyright (C) 2007 Michael Kerrisk .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" .\" Modified Sat Jul 24 13:35:59 1993 by Rik Faith .\" Modified Sun Nov 28 17:19:01 1993 by Rik Faith .\" Modified Sat Jan 13 12:58:08 1996 by Michael Haardt .\" .\" Modified Sun Jul 21 18:59:33 1996 by Andries Brouwer .\" 2001-12-13 added remark by Zack Weinberg .\" 2007-06-18 mtk: .\" Added details about seekable files and file offset. .\" Noted that write() may write less than 'count' bytes, and .\" gave some examples of why this might occur. .\" Noted what happens if write() is interrupted by a signal. .\" .\" Tradotto da Goffredo Baroncelli il 2/4/1998 .\" Aggiornamento a man-pages-2.11 di Giulio Daprelà .\" novembre 2005 .\" Aggiornamento a man paes 2.34 di Giulio Daprelà - giugno 2006 .\" Aggiornamento a man paes 2.38 di Giulio Daprelà - agosto 2006 .\" Aggiornamento a man paes 2.40 di Giulio Daprelà - ottobre 2006 .\" Aggiornamento a man paes 2.62 di Elisabetta Galli - luglio 2007 .\" .TH WRITE 2 "18 giugno 2007" "Linux" "Linux Programmer's Manual" .SH NOME write \- Scrive su un descrittore di file .SH SINTASSI .B #include .sp .BI "ssize_t write(int " fd ", const void *" buf ", size_t " count ); .SH DESCRIZIONE .BR write () scrive fino a .I count byte contenuti in .IR buf nel descrittore di file .IR fd. Il numero di byte scritti potrebbe essere meno di .I count se, per esempio, non c'è spazio sufficiente sul supporto fisico sottostante, o se si raggiunge il limite della risorsa .B RLIMIT_FSIZE (vedere .BR setrlimit (2)), o se la chiamata è stata interrotta da un handler di segnale dopo che ha scritto meno di .I count byte (vedere anche .BR pipe (7).) Per un file che si può spostare (cioè un file a cui si può applicare .BR 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 .BR open (2) con .BR 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 .BR read (2) avvenuta dopo l'esecuzione di una .BR write () restituisca i nuovi dati. Notare che non tutti i file system sono conformi a POSIX. .SH "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 \fIerrno\fP viene impostato di conseguenza. Se \fIcount\fP è zero, e .I fd fa riferimento ad un file normale, .BR 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 \fIcount\fP è zero e .I fd fa riferimento ad un file diverso da quelli normali, i risultati non sono specificati. .SH ERRORI .TP .B EAGAIN Il descrittore di file .I fd è stato marcato come non bloccante usando .B O_NONBLOCK e la scrittura verrà bloccata. .TP .B EBADF .I fd non è un decrittore di file valido o non è aperto in scrittura. .TP .B EFAULT .I buf è al di fuori del proprio spazio di indirizzamento accessibile. .TP .B 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. .TP .B EINTR La chiamata è stata interrotta da un segnale prima che sia stato scritto qualunque dato. .TP .B EINVAL .I fd è attaccato a un oggetto su cui non si può scrivere; o il file è stato aperto con il flag .B O_DIRECT, e l'indirizzo specificato in .IR buf , o il valore specificato in .IR count , o l'offset del file corrente non è correttamente allineato. .TP .B EIO Un errore I/O di basso livello è accaduto mentre si modificava l'inode. .TP .B ENOSPC Il dispositivo contenente il file a cui fa riferimento .I fd non ha spazio per i dati. .TP .B EPIPE .I fd è connesso a una pipe o un socket la cui lettura è chiusa. Quando ciò accade il processo di scrittura riceverà anche un segnale .B SIGPIPE. (Quindi il valore restituito in scrittura è visto solo se il programma intercetta, blocca o ignora questo segnale). .PP Possono accadere altri errori, in funzione dell'oggetto connesso a .IR fd . .SH CONFORME A SVr4, 4.3BSD, POSIX.1-2001. .\" SVr4 documenta condizioni di errore .\" aggiuntive EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO, o ERANGE. Sotto SVr4 una scrittura può essere interrotta in qualsiasi punto e restituire EINTR, non solo prima che venga scritto un dato. .SH NOTE Un ritorno con successo da .BR 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 .BR fsync (2) dopo che si è eseguita la scrittura di tutti i propri dati. Se una scrittura con .BR write () viene interrotta da un handler di segnale prima che venga scritto qualunque byte, la chiamata fallisce con l'errore .BR EINTR ; se viene interrotta dopo aver scritto almeno un byte, la chiamata ha successo e restituisce il numero di byte scritti. .SH VEDERE ANCHE .BR close (2), .BR fcntl (2), .BR fsync (2), .BR ioctl (2), .BR lseek (2), .BR open (2), .BR pwrite (2), .BR read (2), .BR select (2), .BR writev (2), .BR fwrite (3)