---
name: "rewind"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/fgetpos"
---

# rewind(3)

reposition a stream

Part of [fgetpos(3)](/fgetpos/3.md).

## NAME

**fgetpos**, **fseek**, **fseeko**, **fsetpos**, **ftell**, **ftello**, **rewind** – reposition a stream

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<stdio.h\>**

*int*\

**fseek**(*FILE \*stream*, *long offset*, *int whence*);

*long*\

**ftell**(*FILE \*stream*);

*void*\

**rewind**(*FILE \*stream*);

*int*\

**fgetpos**(*FILE \* restrict stream*, *fpos\_t \* restrict pos*);

*int*\

**fsetpos**(*FILE \*stream*, *const fpos\_t \*pos*);

**#include \<sys/types.h\>**

*int*\

**fseeko**(*FILE \*stream*, *off\_t offset*, *int whence*);

*off\_t*\

**ftello**(*FILE \*stream*);

## DESCRIPTION

The **fseek**() function sets the file position indicator for the stream pointed to by *stream*. The new position, measured in bytes, is obtained by adding *offset* bytes to the position specified by *whence*. If *whence* is set to SEEK\_SET, SEEK\_CUR, or SEEK\_END, the offset is relative to the start of the file, the current position indicator, or end-of-file, respectively. A successful call to the **fseek**() function clears the end-of-file indicator for the stream and undoes any effects of the [ungetc(3)](/ungetc/3.md) and [ungetwc(3)](/ungetwc/3.md) functions on the same stream.

The **ftell**() function obtains the current value of the file position indicator for the stream pointed to by *stream*.

The **rewind**() function sets the file position indicator for the stream pointed to by *stream* to the beginning of the file. It is equivalent to:

```
(void)fseek(stream, 0L, SEEK_SET)
```

except that the error indicator for the stream is also cleared (see [clearerr(3)](/clearerr/3.md)).

Since **rewind**() does not return a value, an application wishing to detect errors should clear *errno*, then call **rewind**(), and if *errno* is non-zero, assume an error has occurred.

The **fseeko**() function is identical to **fseek**(), except it takes an *off\_t* argument instead of a *long*. Likewise, the **ftello**() function is identical to **ftell**(), except it returns an *off\_t*.

The **fgetpos**() and **fsetpos**() functions are alternate interfaces for retrieving and setting the current position in the file, similar to **ftell**() and **fseek**(), except that the current position is stored in an opaque object of type *fpos\_t* pointed to by *pos*. These functions provide a portable way to seek to offsets larger than those that can be represented by a *long* *int*. They may also store additional state information in the *fpos\_t* object to facilitate seeking within files containing multibyte characters with state-dependent encodings. Although *fpos\_t* has traditionally been an integral type, applications cannot assume that it is; in particular, they must not perform arithmetic on objects of this type.

If the stream is a wide character stream (see [fwide(3)](/fwide/3.md)), the position specified by the combination of *offset* and *whence* must contain the first byte of a multibyte sequence.

## RETURN VALUES

The **rewind**() function returns no value.

The **fgetpos()**, **fseek()**, **fseeko()**, and **fsetpos()** functions return the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

Upon successful completion, **ftell**() and **ftello**() return the current offset. Otherwise, -1 is returned and the global variable *errno* is set to indicate the error.

## ERRORS

- \[EBADF\]

  The *stream* argument is not a seekable stream.

- \[EINVAL\]

  The *whence* argument is invalid or the resulting file-position indicator would be set to a negative value.

- \[EOVERFLOW\]

  The resulting file offset would be a value which cannot be represented correctly in an object of type *off\_t* for **fseeko**() and **ftello**() or *long* for **fseek**() and **ftell**().

- \[ESPIPE\]

  The file descriptor underlying stream is associated with a pipe or FIFO or file-position indicator value is unspecified (see [ungetc(3)](/ungetc/3.md)).

The functions **fgetpos**(), **fseek**(), **fseeko**(), **fsetpos**(), **ftell**(), **ftello**(), and **rewind**() may also fail and set *errno* for any of the errors specified for the routines [fflush(3)](/fflush/3.md), [fstat(2)](/fstat/2.md), [lseek(2)](/lseek/2.md), and [malloc(3)](/malloc/3.md).

## SEE ALSO

[lseek(2)](/lseek/2.md), [clearerr(3)](/clearerr/3.md), [fwide(3)](/fwide/3.md), [ungetc(3)](/ungetc/3.md), [ungetwc(3)](/ungetwc/3.md)

## STANDARDS

The **fgetpos**(), **fsetpos**(), **fseek**(), **ftell**(), and **rewind**() functions conform to ISO/IEC 9899:1990 (“ISO C90”).

The **fseeko**() and **ftello**() functions conform to IEEE Std 1003.1-2001 (“POSIX.1”).

## HISTORY

The functions **fseek**(), **ftell**(), and **rewind**() first appeared in Version 7 AT&T UNIX.
