True, offset in fseek() function can be a negative number. It makes the file pointer to move backwards from the current position.
Declaration: retval = fseek( fp, offset, from );
Where:
FILE *fp; = points to the file on which I/O is to be repositioned.
long offset; = is an integer giving the number of bytes to move forward or backward in the file. This may be positive or negative.
int from; = is one of the manifests SEEK_SET, SEEK_CUR, or SEEK_END.
int retval; = is non-zero if the seek operation was invalid (e.g. on a file not opened with a "b" option); otherwise, the return value is zero.