fseek()

fseek(<handle>, <posición puntero>, <modo>)

Descripción:

Sitúa el puntero de lectura/escritura de un archivo en la posición indicada.

La función requiere, en primer lugar, el <handle> o identificador de archivo devuelto por la función fopen() al abrirlo.

En segundo lugar se especifica la nueva posición en la que debe situarse el <puntero> del archivo. Tras llamar a esta función, todas las operaciones de lectura o escritura que se efectúen, lo harán a partir de esta posición.

Como último parámetro se debe indicar el <modo> en el que se especifica la nueva posición del puntero, puede ser uno de estos tres:

 seek_set - Posición respecto al inicio del archivo (0).
 seek_cur - Incremento relativo a la posición actual (1).
 seek_end - Posición respecto al final del archivo (2).

Para obtener la situación actual del puntero de un archivo, se debe utilizar la función ftell().

Todas las operaciones de lectura o escritura sobre un archivo avanzan automáticamente el puntero del mismo, de forma que todos estos accesos se realicen de forma secuencial (leyendo o escribiendo los datos unos a continuación de otros).

Programa ejemplo:
PROGRAM ejemplo_fseek;

GLOBAL
    mitabla[3]=11,22,33,44;
    midato;
    mihandle;

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

    // Sitúa el puntero para leer el cuarto dato del archivo (44)

    fseek(mihandle,3,seek_set);

    fread(OFFSET midato,1,mihandle);
    fclose(mihandle);
END


Este ejemplo escribe los cuatro datos contenidos en mitabla (11,22,33 y 44) en el archivo help.dat, tras esto, abre el archivo para lectura y utiliza la función fseek() para situar el puntero en la posición 3 a partir del inicio del archivo (con seek_set).

A partir de este momento, se podrá leer a partir del cuarto dato del archivo, por ello, cuando se lee un valor en la variable midato este será 44, es decir, el cuarto valor de la tabla.


Nota: Por defecto, la <posición del puntero> se especifica como un número de datos simples, teniendo en cuenta que un dato simple (una variable) ocupa 4 bytes. Es decir, que si por ejemplo, se sitúa el puntero en la posición diez a partir del inicio del fichero, se podrá entonces acceder a los datos contenidos en el archivo a partir del byte cuarenta.

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


Ver: ftell() - fread() - fwrite() - unit_size