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

# fputc(3)

output a character or word to a stream

## NAME

**fputc**, **fputc\_unlocked**, **putc**, **putc\_unlocked**, **putchar**, **putchar\_unlocked**, **putw** – output a character or word to a stream

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

**fputc**(*int c*, *FILE \*stream*);

*int*\

**fputc\_unlocked**(*int c*, *FILE \*stream*);

*int*\

**putc**(*int c*, *FILE \*stream*);

*int*\

**putc\_unlocked**(*int c*, *FILE \*stream*);

*int*\

**putchar**(*int c*);

*int*\

**putchar\_unlocked**(*int c*);

*int*\

**putw**(*int w*, *FILE \*stream*);

## DESCRIPTION

The **fputc**() function writes the character *c* (converted to an \`\`unsigned char'') to the output stream pointed to by *stream*.

The **putc**() macro acts essentially identically to **fputc**(), but is a macro that expands in-line. It may evaluate *stream* more than once, so arguments given to **putc**() should not be expressions with potential side effects.

The **putchar**() function is identical to **putc**() with an output stream of stdout.

The **putw**() function writes the specified *int* to the named output *stream*.

The **fputc\_unlocked**(), **putc\_unlocked**(), and **putchar\_unlocked**() functions are equivalent to **fputc**(), **putc**(), and **putchar**() 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 for each character, and to avoid output being interspersed from multiple threads writing to the same stream.

## RETURN VALUES

The functions, **fputc**(), **putc**(), **putchar**(), **putc\_unlocked**() and **putchar\_unlocked**() return the character written. If an error occurs, the value EOF is returned. The **putw**() function returns 0 on success; EOF is returned if a write error occurs, or if an attempt is made to write a read-only stream.

## SEE ALSO

[ferror(3)](/ferror/3.md), [flockfile(3)](/flockfile/3.md), [fopen(3)](/fopen/3.md), [getc(3)](/getc/3.md), [putwc(3)](/putwc/3.md), [stdio(3)](/stdio/3.md)

## STANDARDS

The functions **fputc**(), **putc**(), and **putchar**(), conform to ISO/IEC 9899:1990 (“ISO C90”). The **putc\_unlocked**() and **putchar\_unlocked**() functions conform to IEEE Std 1003.1-2001 (“POSIX.1”). A function **putw**() function appeared in Version 6 AT&T UNIX.

## BUGS

The size and byte order of an *int* varies from one machine to another, and **putw**() is not recommended for portable applications.
