_write

Escribe datos en un archivo.

Sintaxis

int _write(
   int fd,
   const void *buffer,
   unsigned int count
);

Parámetros

fd
Descriptor de archivo del archivo en el que se van a escribir datos.

buffer
Datos que se van a escribir.

count
Número de bytes.

Valor devuelto

Si es correcto, _write devuelve el número de bytes escrito. Si el espacio real que queda en el disco es inferior al tamaño del búfer que la función trata de escribir en el disco, se produce un error en _write y no se vacía nada del contenido del búfer en el disco. Un valor devuelto de -1 indica un error. Si se pasan parámetros no válidos, esta función invoca al controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, la función devuelve -1 y errno se establece en uno de los tres valores: EBADF, lo que significa que el descriptor de archivo no es válido o el archivo no se abre para escribir; ENOSPC, lo que significa que no hay suficiente espacio en el dispositivo para la operación; o EINVAL, lo que significa que buffer era un puntero nulo o que se pasó un impar count de bytes en modo Unicode.

Para obtener más información sobre estos y otros códigos de retorno, vea errno, _doserrno, _sys_errlist y _sys_nerr.

Si el archivo se abre en modo de texto, cada carácter de salto de línea se reemplaza por un par de retorno de carro-salto de línea en la salida. Este reemplazo no tiene efecto alguno en el valor devuelto.

Cuando el archivo se abre en un modo de conversión Unicode (por ejemplo, si fd se abre mediante _open o _sopen y un parámetro de modo que incluye _O_WTEXT, _O_U16TEXT o _O_U8TEXT; o si se abre mediante fopen y un parámetro de modo que incluye ccs=UNICODE, ccs=UTF-16LE o ccs=UTF-8; o si el modo se cambia a un modo de conversión Unicode mediante _setmode), buffer se interpretará como un puntero a una matriz de wchar_t que contiene datos UTF-16. Si se intenta escribir un número impar de bytes en este modo, se producirá un error de validación de parámetros.

Comentarios

La función _write escribe count bytes desde el buffer al archivo asociado a fd. La operación de escritura se inicia en la posición actual del puntero de archivo (si existe) asociado al archivo en cuestión. Si el archivo se abre para anexarlo, la operación comenzará en el final actual del archivo. Tras la operación de escritura, el puntero de archivo se incrementará según el número de bytes escrito.

Cuando escribe en archivos abiertos en modo de texto, _write trata un carácter CTRL+Z como el final lógico del archivo. Cuando escribe en un dispositivo, _write trata un carácter CTRL+Z en el búfer como terminador de salida.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Routine Encabezado necesario
_write <io.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// 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.

Consulte también

E/S de bajo nivel
fwrite
_open, _wopen
_read
_setmode