Namespaces
Variants

fread

De es.cppreference.net
< c | io
 
 
Entrada/salida de archivos
Tipos y objetos
        
Funciones
Acceso a archivos
(C95)
Entrada/salida sin formato
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Entrada formateada
Entrada/salida directa
Salida formateada
Posicionamiento en archivos
Manejo de errores
Operaciones sobre archivos
 
Definido en el encabezado <stdio.h>
size_t fread( void* buffer, size_t size, size_t count,
              FILE* stream );
(hasta C99)
size_t fread( void* restrict buffer, size_t size, size_t count,
              FILE* restrict stream );
(desde C99)

Lee hasta count objetos en el arreglo buffer desde el flujo de entrada dado stream como si llamara a fgetc size veces por cada objeto, y almacena los resultados, en el orden obtenido, en las posiciones sucesivas de buffer, que se reinterpreta como un arreglo de unsigned char. El indicador de posición del archivo para el flujo avanza según la cantidad de caracteres leídos.

Si ocurre un error, el valor resultante del indicador de posición del archivo para el flujo es indeterminado. Si se lee un elemento parcial, su valor es indeterminado.

Parámetros

buffer - puntero al arreglo donde se almacenan los objetos leídos
size - tamaño de cada objeto en bytes
count - la cantidad de objetos a leer
stream - el flujo desde el cual 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 devuelve 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"); // must use binary mode
    fwrite(a, sizeof* a, SIZE, fp); // writes an array of doubles
    fclose(fp);

    double b[SIZE];
    fp = fopen("test.bin","rb");
    const size_t ret_code = fread(b, sizeof b[0], SIZE, fp); // reads an array of 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 // error handling
    {
        if (feof(fp))
            printf("Error reading test.bin: unexpected end of file\n");
        else if (ferror(fp))
            perror("Error reading test.bin");
    }

    fclose(fp);
}

Posible salida:

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

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 en un archivo
(función)