UC3M

Telematic/Audiovisual Syst./Communication Syst. Engineering

Systems Architecture

September 2017 - January 2018

9.4.  Random access to disk files

In the last section you have learned how to read or write data sequentially to an opened disk file. However, in some other cases, you need to access particular data somewhere in the middle of a disk file. To do so, there are I/O functions that are designed to deal with random access: fseek, ftell and rewind.

The fseek function offers you the possibility to move the file position indicator to the spot you want to access in a file. The syntax is:

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);

stream is the file pointer associated with an opened file. offset indicates the number of bytes from a fixed position specified by whence that can have one of the following values: SEEK_SET, SEEK_CUR, and SEEK_END. If it is successful, the function returns 0; otherwise, the function returns a nonzero value.

If SEEK_SET is chosen, the offset is counted from the beginning of the file, and the value of offset should be greater than or equal to zero. If SEEK_END is used, the offset starts from the end of the file, and the value of offset should be negative. When SEEK_CUR is used, the offset is calculated from the current value of the file position indicator.

You can obtain the current value of the file position indicator by calling the ftell function.

#include <stdio.h>
int ftell(FILE *stream);

The value returned by ftell represents the number of bytes from the beginning of the file to the current position pointed to by the file position indicator. If the function fails, it returns –1L (that is, a long value of minus 1).

Sometimes you might want to reset the file position indicator and put it at the beginning of a file. To do this you have the rewind function.

#include <stdio.h>
void rewind(FILE *stream);

So, the following statement:

rewind(f_ptr);

is equivalent to this:

fseek(f_ptr,0L,SEEK_SET);