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