If you want to find a particular file position within a file, using a
low-level file routine, you can call the lseek function. This is
very similar to the high-level file routine fseek, except that it
accepts a file descriptor rather than a stream as an argument.
The lseek function specifies the file position for the next
read or write operation. (See File position, for more
information on file positions.)
The lseek function takes three parameters. The first parameter
is the file descriptor. The second is of type off_t and specifies
the number of bytes to move the file position indicator. The third
argument and the third parameter is a constant that specifies whether
the offset is relative to the beginning of the file (SEEK_SET),
to the current file position (SEEK_CUR), or to the end of the
file (SEEK_END). If SEEK_CUR or SEEK_END is used,
the offset specified can be positive or negative. If you specify
SEEK_END, set the position past the current end of the file, and
actually write data, you will extend the file with zeroes up to the
position you specify. However, the blocks of zeroes are not actually
written to disk, so the file takes up less space on disk than it seems
to; this is called a sparse file.
The return value of lseek is of type off_t and normally
contains the resulting file position, as measured in bytes from the
beginning of the file. If you wish to read the current file position,
therefore, you can specify an offset of 0 and a third parameter of
SEEK_CUR, as follows: