fread
|
Definido en el encabezado
<stdio.h>
|
||
| (hasta C99) | ||
| (desde C99) | ||
Lee hasta count objetos en el arreglo buffer desde el flujo de entrada dado stream como si se llamara a fgetc size veces para cada objeto, y almacena los resultados, en el orden obtenido, en las posiciones sucesivas de buffer , el cual es reinterpretado como un arreglo de unsigned char . El indicador de posición del archivo para el flujo avanza según el número de caracteres leídos.
Si ocurre un error, el valor resultante del indicador de posición de archivo para el flujo es indeterminado. Si se lee un elemento parcial, su valor es indeterminado.
Contenidos |
Parámetros
| buffer | - | puntero al array donde se almacenan los objetos leídos |
| size | - | tamaño de cada objeto en bytes |
| count | - | número de objetos a leer |
| stream | - | flujo a leer |
Valor de retorno
Número de objetos leídos exitosamente, que puede ser menor que count si ocurre un error o una condición de fin de archivo.
Si
size
o
count
es cero,
fread
retorna cero y no realiza ninguna otra acción.
fread
no distingue entre fin-de-archivo y error, y los llamadores deben usar
feof
y
ferror
para determinar cuál ocurrió.
Ejemplo
#include <stdio.h> enum { SIZE = 5 }; int main(void) { const double a[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0}; printf("Array has size %ld bytes, element size: %ld\n", sizeof a, sizeof *a); FILE *fp = fopen("test.bin", "wb"); // se debe usar modo binario fwrite(a, sizeof *a, SIZE, fp); // escribe un array de doubles fclose(fp); double b[SIZE]; fp = fopen("test.bin","rb"); const size_t ret_code = fread(b, sizeof b[0], SIZE, fp); // lee un array de doubles if (ret_code == SIZE) { printf("Array at %p read successfully, contents:\n", (void*)&a); for (int n = 0; n != SIZE; ++n) printf("%f ", b[n]); putchar('\n'); } else // manejo de errores { if (feof(fp)) printf("Error reading test.bin: unexpected end of file\n"); else if (ferror(fp)) perror("Error reading test.bin"); } fclose(fp); }
Salida posible:
Array has size 40 bytes, element size: 8 Array at 0x1337f00d6960 read successfully, contents: 1.000000 2.000000 3.000000 4.000000 5.000000
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 7.21.8.1 La función fread (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.21.8.1 La función fread (p: 243-244)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.21.8.1 La función fread (p: 335)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.19.8.1 La función fread (p: 301)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 4.9.8.1 La función fread
Véase también
|
(C11)
(C11)
(C11)
|
lee entrada formateada desde
stdin
, un flujo de archivo o un búfer
(función) |
|
obtiene una cadena de caracteres desde un flujo de archivo
(función) |
|
|
escribe a un archivo
(función) |
|
|
Documentación de C++
para
fread
|
|