fread()

fread(<OFFSET datos>, <longitud>, <handle>)

Retorna:

0 - Se produjo un error, o no se leyeron todos los datos pedidos.
1 - Si se pudieron leer todos los datos.

Descripción:

Esta función permite leer datos de un archivo abierto con la función fopen(), a partir de la posición indicada por el puntero de lectura/escritura.

El archivo se debe haber abierto en un modo de lectura, o que la permita.

El puntero se situa inicialmente al comienzo del archivo, al abrirse el mismo, y avanza secuencialmente según se vayan leyendo datos. No obstánte puede situarse este puntero del archivo en cualquier posición, utilizando la función fseek() y la función ftell() permite obtener la posición actual del puntero de un archivo.

La función fread() requiere como primer parámetro el <OFFSET de los datos> en los que deben leerse los datos del archivo, es decir, la dirección de memoria a partir de la cual se deben colocar los datos que se vayan leyendo del archivo.

Como segundo parámetro se requiere la <longitud> o tamaño total de los datos que se quieren leer, es decir, el número de posiciones de memoria que ocupan dichos datos. La longitud de un dato se puede obtener con la función sizeof().

El último parámetro debe ser el handle o identificador de archivo que se obtuvo al abrir el archivo como valor de retorno de fopen().

Programa ejemplo:
PROGRAM ejemplo_fread;

GLOBAL
    tabla1[3]=11,22,33,44;
    tabla2[3];
    mihandle;

BEGIN
    mihandle=fopen("help\help.dat","w");
    fwrite(OFFSET tabla1,4,mihandle);
    fclose(mihandle);
    mihandle=fopen("help\help.dat","r");

    fread(OFFSET tabla2,4,mihandle); // Lee el archivo sobre <tabla2>

    fclose(mihandle);
END


Este programa ejemplo tiene definidas dos tablas globales; tabla1 con cuatro valores inicializados a 11, 22, 33 y 44, y tabla2 con cuatro sin incializar (a cero).

Se utilizan las funciones de archivos para escribir en un archivo el contenido de la tabla1 y después cargarlo sobre la tabla2. Al finalizar el programa, se habrán copiado los datos de la primera tabla en la segunda.

Se llama a la función fopen() en dos ocasiones, la primera para crearlo y escribir en él, y la segunda para abrirlo y leer su contenido.

Es importante resaltar que cada vez que se abra o cree un archivo, se tiene que cerrar después con la función fclose() (se puede ver como, en el ejemplo, se cierra el archivo en dos ocasiones).


La función inversa a fopen(), es decir, la que permite escribir datos en un archivo en lugar de leerlos, es fwrite(). La forma de utilizar esta función y sus parámetros son idénticos a los de fread().


Nota: Por defecto, la <longitud> se especifica como el número de datos simples, teniendo en cuenta que un dato simple (una variable) ocupa 4 bytes. Es decir, que si por ejemplo, se leen diez datos (indicando 10 como longitud), se estarán leyendo cuarenta bytes.

Se puede cambiar esta relación modificando la variable global unit_size, que por defecto vale 4 en todos los programas.


Ver: fopen() - fwrite() - fseek() - unit_size