### 4.27 `fsetpos`—restore position of a stream or file

Synopsis

    #include <stdio.h>
    int fsetpos(FILE *fp, const fpos_t *pos);
    int _fsetpos_r(struct _reent *ptr, FILE *fp,
        const fpos_t *pos);

Description
Objects of type `FILE` can have a “position” that records how much of the file your program has already read. Many of the `stdio` functions depend on this position, and many change it as a side effect.

You can use `fsetpos` to return the file identified by fp to a previous position `*pos` (after first recording it with `fgetpos`).

See `fseek` for a similar facility.

Returns
`fgetpos` returns `0` when successful. If `fgetpos` fails, the result is `1`. The reason for failure is indicated in `errno`: either `ESPIPE` (the stream identified by fp doesn’t support repositioning) or `EINVAL` (invalid file position).

Portability
ANSI C requires `fsetpos`, but does not specify the nature of `*pos` beyond identifying it as written by `fgetpos`.

Supporting OS subroutines required: `close`, `fstat`, `isatty`, `lseek`, `read`, `sbrk`, `write`.