#### 14.2.19 File Positioning

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

Built-in Function: ftell (fid)

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

  See also: fseek, feof, fopen.

Built-in Function: fseek (fid, offset)
Built-in Function: fseek (fid, offset, origin)
Built-in Function: status = fseek (…)

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

  The pointer is positioned offset characters from the origin, which may be one of the predefined variables `SEEK_CUR` (current position), `SEEK_SET` (beginning), or `SEEK_END` (end of file) or strings `"cof"`, `"bof"` 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.

  Return 0 on success and -1 on error.

  See also: fskipl, frewind, ftell, fopen.

Built-in Function: SEEK_SET ()
Built-in Function: SEEK_CUR ()
Built-in Function: SEEK_END ()

  Return the numerical value to pass to `fseek` to perform one of the following actions:

  `SEEK_SET`

    Position file relative to the beginning.

  `SEEK_CUR`

    Position file relative to the current position.

  `SEEK_END`

    Position file relative to the end.

  See also: fseek.

Built-in Function: frewind (fid)

  Move the file pointer to the beginning of the file fid, returning 0 for success, and -1 if an error was encountered. It 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);