---
name: "fwrite"
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/fread"
---

# fwrite(3)

binary stream input/output

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

## NAME

**fread**, **fread\_unlocked**, **fwrite**, **fwrite\_unlocked** – binary stream input/output

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*size\_t*\

**fread**(*void \* restrict ptr*, *size\_t size*, *size\_t nmemb*, *FILE \* restrict stream*);

*size\_t*\

**fread\_unlocked**(*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*);

*size\_t*\

**fwrite\_unlocked**(*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*.

The **fread\_unlocked**() and **fwrite\_unlocked**() functions are equivalent to **fread**() and **fwrite**() respectively, except that the caller is responsible for locking the stream with [flockfile(3)](/flockfile/3.md) before calling them. These functions may be used to avoid the overhead of locking the stream and to prevent races when multiple threads are operating on the same stream.

## 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 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)](/feof/3.md) and [ferror(3)](/ferror/3.md) to determine which occurred. The function **fwrite**() returns a value less than *nmemb* only if a write error has occurred.

## SEE ALSO

[read(2)](/read/2.md), [write(2)](/write/2.md)

## STANDARDS

The functions **fread**() and **fwrite**() conform to ISO/IEC 9899:1990 (“ISO C90”).

## HISTORY

The functions **fread**() and **fwrite**() first appeared in Version 7 AT&T UNIX.
