_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_errliste _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_U16TEXTo _O_U8TEXTo se viene aperto usando fopen e un parametro mode che include ccs=UNICODE, ccs=UTF-16LEo ccs=UTF-8o 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.

Vedi anche

I/O di basso livello
fwrite
_open, _wopen
_read
_setmode