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

# puts(3)

output a line to a stream

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

## NAME

**fputs**, **fputs\_unlocked**, **puts** – output a line to a stream

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

**fputs**(*const char \*str*, *FILE \*stream*);

*int*\

**fputs\_unlocked**(*const char \*str*, *FILE \*stream*);

*int*\

**puts**(*const char \*str*);

## DESCRIPTION

The function **fputs**() writes the string pointed to by *str* to the stream pointed to by *stream*.

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

The function **puts**() writes the string *str*, and a terminating newline character, to the stream stdout.

## RETURN VALUES

The functions **fputs**() and **puts**() return a nonnegative integer on success and EOF on error.

## ERRORS

- \[EBADF\]

  The *stream* argument is not a writable stream.

The functions **fputs**() and **puts**() may also fail and set *errno* for any of the errors specified for the routines [write(2)](/write/2.md).

## SEE ALSO

[ferror(3)](/ferror/3.md), [fputws(3)](/fputws/3.md), [putc(3)](/putc/3.md), [stdio(3)](/stdio/3.md)

## STANDARDS

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