14.2.19 File Positioning

Three functions are available for setting and determining the position of the file pointer for a given file.

 
: pos = ftell (fid)

Return the position of the file pointer as the number of characters from the beginning of the file specified by file descriptor fid.

See also: fseek, frewind, feof, fopen.

 
: status = fseek (fid, offset)
: status = fseek (fid, offset, origin)

Set the file pointer to the location offset within the file fid.

The pointer is positioned offset characters from the origin, which may be one of the predefined variables SEEK_SET (beginning), SEEK_CUR (current position), or SEEK_END (end of file) or strings "bof", "cof", or "eof". If origin is omitted, SEEK_SET is assumed. offset may be positive, negative, or zero but not all combinations of origin and offset can be realized.

fseek returns 0 on success and -1 on error.

See also: fskipl, frewind, ftell, fopen, SEEK_SET, SEEK_CUR, SEEK_END.

 
: fseek_origin = SEEK_SET ()

Return the numerical value to pass to fseek to position the file pointer relative to the beginning of the file.

See also: SEEK_CUR, SEEK_END, fseek.

 
: fseek_origin = SEEK_CUR ()

Return the numerical value to pass to fseek to position the file pointer relative to the current position.

See also: SEEK_SET, SEEK_END, fseek.

 
: fseek_origin = SEEK_END ()

Return the numerical value to pass to fseek to position the file pointer relative to the end of the file.

See also: SEEK_SET, SEEK_CUR, fseek.

 
: frewind (fid)
: status = frewind (fid)

Move the file pointer to the beginning of the file specified by file descriptor fid.

If an output status is requested then frewind returns 0 for success, and -1 if an error is encountered.

Programming Note: frewind is equivalent to fseek (fid, 0, SEEK_SET).

See also: fseek, ftell, fopen.

The following example stores the current file position in the variable marker, moves the pointer to the beginning of the file, reads four characters, and then returns to the original position.

marker = ftell (myfile);
frewind (myfile);
fourch = fgets (myfile, 4);
fseek (myfile, marker, SEEK_SET);