En la sección anterior hemos visto cómo leer y escribir datos de manera
secuencial. En algunos casos, sin embargo, se necesita acceder a una
parte específica en mitad de un fichero. Para eso contamos con las
funciones, fseek
, ftell
y
rewind
, que permiten realizar accesos aleatorios.
La función fseek
permite desplazar el indicador de posición
de fichero al sitio desde donde el cual quieres acceder al fichero.
La sintaxis es:
#include <stdio.h> int fseek(FILE *stream, long offset, int whence);
stream
es el puntero asociado con el fichero abierto.
offset
indica el número de bytes que se va a desplazar
el indicador desde una posición especificada por whence
,
que puede tener uno de los siguientes valores: SEEK_SET
,
SEEK_CUR
y SEEK_END
. Si todo va bien, la
función devuelve 0
; si no, devuelve un valor distinto de
cero.
Si se utiliza SEEK_SET
, el desplazamiento se realizará
desde el principio del fichero, y el tamaño de offset
deberá
ser mayor o igual que cero. Si se usa SEEK_END
, el
desplazamiento se realizará desde el final del fichero, y el valor de
offset
tendrá que ser negativo. Si se usa
SEEK_CUR
, el desplazamiento se calcula desde la posición
actual del indicador de posición de fichero.
Puedes obtener el valor actual del indicador de posición de fichero
llamando a ftell
:
#include <stdio.h> int ftell(FILE *stream);
El valor que devuelve ftell
representa el número de
bytes desde el principio del fichero hasta donde nos encontramos
en ese momento (sitio indicado por el indicador de posición).
Si la función falla, devuelve
-1L
(es decir, el valor largo (long
) de
menos 1).
A veces te interesará reiniciar el indicador de posición de fichero y
llevarlo al inicio del mismo. Para esto cuentas con la función
rewind
:
#include <stdio.h> void rewind(FILE *stream);
De esta manera, la siguiente línea de código:
rewind(ptr_fich);
es equivalente a esta otra:
fseek(ptr_fich,0L,SEEK_SET);