fread
Lee datos desde una secuencia.
Sintaxis
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
Parámetros
buffer
Ubicación de almacenamiento de los datos.
size
Tamaño del elemento en bytes.
count
Número máximo de elementos que se va a leer.
stream
Puntero a la estructura FILE
.
Valor devuelto
fread
devuelve el número de elementos completos que lee la función, que puede ser menor que count
si se produce un error o si encuentra el final del archivo antes de alcanzar count
. Use la función feof
o ferror
para distinguir un error de lectura de una condición de final de archivo. Si size
o count
es 0, fread
devuelve 0 y el contenido del búfer queda sin cambios. Si stream
o buffer
es un puntero nulo, fread
invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, esta función establece errno
en EINVAL
y devuelve 0.
Para obtener más información sobre los códigos de retorno, vea errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
Comentarios
La función fread
lee hasta count
elementos de size
bytes en la entrada stream
y los almacena en buffer
. El puntero de archivo asociado a stream
(si existe uno) está avanzado por el número de bytes fread
leídos. Si la secuencia especificada se abre en modo de texto, las nuevas líneas de estilo Windows se convierten en nuevas líneas de estilo Unix. Es decir, los pares de retorno de carro-avance de línea (CRLF) se reemplazan por caracteres de avance de línea únicos (LF). Este reemplazo no tiene ningún efecto en el puntero de archivo ni en el valor devuelto. Si se produce un error, la posición del puntero de archivo es indeterminada. No se puede determinar el valor de un elemento de lectura parcial.
Cuando se usa en una secuencia en modo de texto, si la cantidad de datos solicitados (es decir, size
* count
) es mayor o igual que el FILE
tamaño interno * del búfer (de forma predeterminada, el tamaño es de 4096 bytes, configurable mediante setvbuf
), los datos de secuencia se copian directamente en el búfer proporcionado por el usuario y la conversión de nueva línea se realiza en ese búfer. Dado que los datos convertidos pueden ser más cortos que los datos del flujo copiados en el búfer, los datos que pasen buffer
[return_value
* size
] (donde return_value
es el valor devuelto de fread
) pueden contener datos no convertidos del archivo. Por este motivo, se recomienda finalizar con NULL los datos de caracteres en buffer
[return_value
* size
] si la intención del búfer es actuar como cadena de estilo C. Consulte fopen
para obtener más información sobre los efectos del modo de texto y el modo binario.
Esta función bloquea otros subprocesos. Si necesita una versión que no sea de bloqueo, use _fread_nolock
.
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
Función | Encabezado necesario |
---|---|
fread |
<stdio.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file. It then tries to open
// FREAD.OUT and read in 25 characters. If the attempt succeeds,
// the program displays the number of actual items read.
#include <stdio.h>
int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;
// Open file in text mode:
if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
// Write 25 characters to stream
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream );
}
else
printf( "Problem opening the file\n" );
if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
{
// Attempt to read in 25 characters
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb
Vea también
E/S de secuencia
E/S de archivo de modo binario y texto
fopen
fwrite
_read