December 19, 2008 FREAD 3

### NAME

fread, fwrite - binary stream input/output

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```size_t` fread(```void * restrict ptr``, size_t size``, size_t nmemb``, FILE * restrict stream`)
```size_t` fwrite(```const void * restrict ptr``, size_t size``, size_t nmemb``, FILE * restrict stream`)

### DESCRIPTION

The function fread(``) reads ```nmemb` objects, each ```size` bytes long, from the stream pointed to by ```stream`, storing them at the location given by ```ptr`.

The function fwrite(``) writes ```nmemb` objects, each ```size` bytes long, to the stream pointed to by ```stream`, obtaining them from the location given by ```ptr`.

Mixing fread(``) and fwrite(``) calls without setting the file position explicitly using fsetpos(``) between read and write or write and read operations will lead to unexpected results because of buffering the file pointer not being set to the expected position after each operation completes. This behavior is allowed by ANSI C for efficiency and it will not be changed.

### RETURN VALUES

The functions fread(``) and fwrite(``) advance the file position indicator for the stream by the number of bytes read or written. They return the number of objects read or written. If ```size` or ```nmemb` is 0, the functions return 0 and the state of ```stream` remains unchanged. If an error occurs, or the end-of-file is reached, the return value is a short object count (or zero).

The function fread(``) does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3) to determine which occurred. The function fwrite(``) returns a value less than ```nmemb` only if a write error has occurred.

### SEE ALSO

read(2), write(2)

### STANDARDS

The functions fread(``) and fwrite(``) conform to ANSI X3.159-1989 (``ANSI C89'') .