_write
Scrive i dati in un file.
Sintassi
int _write(
int fd,
const void *buffer,
unsigned int count
);
Parametri
fd
Descrittore di file del file in cui vengono scritti i dati.
buffer
Dati da scrivere.
count
Numero di byte.
Valore restituito
In caso di esito positivo, _write
restituisce il numero di byte scritti. Se lo spazio effettivo rimanente sul disco è minore delle dimensioni del buffer che la funzione sta tentando di scrivere sul disco, _write
ha esito negativo e non scarica il contenuto del buffer sul disco. Il valore restituito -1 indica un errore. Se vengono passati parametri non validi, questa funzione richiama il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione restituisce -1 ed errno
è impostata su uno dei tre valori: EBADF
, ovvero il descrittore di file non è valido o il file non viene aperto per la scrittura; ENOSPC
, il che significa che non è disponibile spazio sufficiente sul dispositivo per l'operazione; oppure EINVAL
, il che significa che buffer
era un puntatore Null o che una stranezza count
di byte è stata passata in modalità Unicode.
Per altre informazioni su questi e altri codici restituiti, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Se il file viene aperto in modalità testo, ogni carattere di avanzamento riga viene sostituito con una coppia di avanzamenti ritorno a capo nell'output. La sostituzione non influisce sul valore restituito.
Quando il file viene aperto in modalità di conversione Unicode, ad esempio se fd
viene aperto usando _open
o _sopen
e un parametro mode che include _O_WTEXT
, _O_U16TEXT
o _O_U8TEXT
o se viene aperto usando fopen
e un parametro mode che include ccs=UNICODE
, ccs=UTF-16LE
o ccs=UTF-8
o se la modalità viene modificata in una modalità di conversione Unicode tramite _setmode
,buffer
viene interpretata come puntatore a una matrice di wchar_t
che contiene UTF-16
dati. Un tentativo di scrivere un numero dispari di byte in questa modalità causerà un errore di convalida del parametro.
Osservazioni:
La funzione _write
scrive byte count
da buffer
nel file associato a fd
. L'operazione di scrittura inizia dalla posizione corrente del puntatore del file (se presente) associato al file specifico. Se il file è aperto per l'aggiunta, l'operazione inizia dalla fine corrente del file. Dopo l'operazione di scrittura, il puntatore al file viene aumentato del numero di byte scritti.
Quando scrive nei file aperti in modalità testo, _write
considera un carattere CTRL+Z come fine logica del file. Quando scrive in un dispositivo, _write
considera un carattere CTRL+Z nel buffer come terminatore di output.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
_write |
<io.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt__write.c
//
// This program opens a file for output and uses _write to write
// some bytes to the file.
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <share.h>
char buffer[] = "This is a test of '_write' function";
int main( void )
{
int fileHandle = 0;
unsigned bytesWritten = 0;
if ( _sopen_s(&fileHandle, "write.o", _O_RDWR | _O_CREAT,
_SH_DENYNO, _S_IREAD | _S_IWRITE) )
return -1;
if (( bytesWritten = _write( fileHandle, buffer, sizeof( buffer ))) == -1 )
{
switch(errno)
{
case EBADF:
perror("Bad file descriptor!");
break;
case ENOSPC:
perror("No space left on device!");
break;
case EINVAL:
perror("Invalid parameter: buffer was NULL!");
break;
default:
// An unrelated error occurred
perror("Unexpected error!");
}
}
else
{
printf_s( "Wrote %u bytes to file.\n", bytesWritten );
}
_close( fileHandle );
}
Wrote 36 bytes to file.