# fseek

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           fseek, fseeko — reposition a file-position indicator in a stream
    


## SYNOPSIS



           #include <stdio.h>
    
           int fseek(FILE *_stream_ , long _offset_ , int _whence_);
           int fseeko(FILE *_stream_ , off_t _offset_ , int _whence_);
    


## DESCRIPTION



           The functionality described on this reference page is aligned with
           the ISO C standard. Any conflict between the requirements
           described here and the ISO C standard is unintentional. This
           volume of POSIX.1‐2017 defers to the ISO C standard.
    
           The _fseek_() function shall set the file-position indicator for the
           stream pointed to by _stream_.  If a read or write error occurs, the
           error indicator for the stream shall be set and _fseek_() fails.
    
           The new position, measured in bytes from the beginning of the
           file, shall be obtained by adding _offset_ to the position specified
           by _whence_.  The specified point is the beginning of the file for
           SEEK_SET, the current value of the file-position indicator for
           SEEK_CUR, or end-of-file for SEEK_END.
    
           If the stream is to be used with wide-character input/output
           functions, the application shall ensure that _offset_ is either 0 or
           a value returned by an earlier call to _ftell_() on the same stream
           and _whence_ is SEEK_SET.
    
           A successful call to _fseek_() shall clear the end-of-file indicator
           for the stream and undo any effects of _ungetc_() and _ungetwc_() on
           the same stream. After an _fseek_() call, the next operation on an
           update stream may be either input or output.
    
           If the most recent operation, other than _ftell_(), on a given
           stream is _fflush_(), the file offset in the underlying open file
           description shall be adjusted to reflect the location specified by
           _fseek_().
    
           The _fseek_() function shall allow the file-position indicator to be
           set beyond the end of existing data in the file. If data is later
           written at this point, subsequent reads of data in the gap shall
           return bytes with the value 0 until data is actually written into
           the gap.
    
           The behavior of _fseek_() on devices which are incapable of seeking
           is implementation-defined.  The value of the file offset
           associated with such a device is undefined.
    
           If the stream is writable and buffered data had not been written
           to the underlying file, _fseek_() shall cause the unwritten data to
           be written to the file and shall mark the last data modification
           and last file status change timestamps of the file for update.
    
           In a locale with state-dependent encoding, whether _fseek_()
           restores the stream's shift state is implementation-defined.
    
           The _fseeko_() function shall be equivalent to the _fseek_() function
           except that the _offset_ argument is of type **off_t**.
    


## RETURN VALUE



           The _fseek_() and _fseeko_() functions shall return 0 if they succeed.
    
           Otherwise, they shall return -1 and set _errno_ to indicate the
           error.
    


## ERRORS



           The _fseek_() and _fseeko_() functions shall fail if, either the
           _stream_ is unbuffered or the _stream_ 's buffer needed to be flushed,
           and the call to _fseek_() or _fseeko_() causes an underlying _lseek_()
           or _write_() to be invoked, and:
    
           **EAGAIN** The O_NONBLOCK flag is set for the file descriptor and the
                  thread would be delayed in the write operation.
    
           **EBADF** The file descriptor underlying the stream file is not open
                  for writing or the stream's buffer needed to be flushed and
                  the file is not open.
    
           **EFBIG** An attempt was made to write a file that exceeds the
                  maximum file size.
    
           **EFBIG** An attempt was made to write a file that exceeds the file
                  size limit of the process.
    
           **EFBIG** The file is a regular file and an attempt was made to write
                  at or beyond the offset maximum associated with the
                  corresponding stream.
    
           **EINTR** The write operation was terminated due to the receipt of a
                  signal, and no data was transferred.
    
           **EINVAL** The _whence_ argument is invalid. The resulting file-position
                  indicator would be set to a negative value.
    
           **EIO** A physical I/O error has occurred, or the process is a
                  member of a background process group attempting to perform
                  a _write_() to its controlling terminal, TOSTOP is set, the
                  calling thread is not blocking SIGTTOU, the process is not
                  ignoring SIGTTOU, and the process group of the process is
                  orphaned.  This error may also be returned under
                  implementation-defined conditions.
    
           **ENOSPC** There was no free space remaining on the device containing
                  the file.
    
           **EOVERFLOW**
                  For _fseek_(), the resulting file offset would be a value
                  which cannot be represented correctly in an object of type
                  **long**.
    
           **EOVERFLOW**
                  For _fseeko_(), the resulting file offset would be a value
                  which cannot be represented correctly in an object of type
                  **off_t**.
    
           **EPIPE** An attempt was made to write to a pipe or FIFO that is not
                  open for reading by any process; a SIGPIPE signal shall
                  also be sent to the thread.
    
           **ESPIPE** The file descriptor underlying _stream_ is associated with a
                  pipe, FIFO, or socket.
    
           The _fseek_() and _fseeko_() functions may fail if:
    
           **ENXIO** A request was made of a nonexistent device, or the request
                  was outside the capabilities of the device.
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           None.
    


## RATIONALE



           None.
    


## FUTURE DIRECTIONS



           None.
    


* * *