ttyname(3)

ttyname3

Return name of a terminal

Usage

#include <unistd.h>

char *ttyname(int fd); int ttyname_r(size_t size; int fd, char buf[size], size_t size);

Library

Standard C library (libc, -lc)

Overview

The function ttyname() returns a pointer to the null-terminated pathname of the terminal device that is open on the file descriptor fd, or NULL on error (for example, if fd is not connected to a terminal). The return value may point to static data, possibly overwritten by the next call. The function ttyname_r() stores this pathname in the buffer buf of size size.

Return value

The function ttyname() returns a pointer to a pathname on success. On error, NULL is returned, and errno is set to indicate the error. The function ttyname_r() returns 0 on success, and an error number upon error.

Errors

EBADF

Bad file descriptor.

ENODEV

fd refers to a slave pseudoterminal device but the corresponding pathname could not be found (see NOTES).

ENOTTY

fd does not refer to a terminal device.

ERANGE

(ttyname_r()) size was too small to allow storing the pathname.

Attributes

For an explanation of the terms used in this section, see attributes(7).

InterfaceAttributeValue
ttyname()Thread safetyMT-Unsafe race:ttyname
ttyname_r()Thread safetyMT-Safe

Notes

A process that keeps a file descriptor that refers to a pts(4) device open when switching to another mount namespace that uses a different /dev/ptmx instance may still accidentally find that a device path of the same name for that file descriptor exists. However, this device path refers to a different device and thus can't be used to access the device that the file descriptor refers to. Calling ttyname() or ttyname_r() on the file descriptor in the new mount namespace will cause these functions to return NULL and set errno to ENODEV.

Releases

19 releases since Debian 1.1 (Buzz); the text changed 15 times.

  1. 1.1–1.3
  2. 2.0–2.1
  3. 2.2
  4. 3.0
  5. 3.1
  6. 4.0
  7. 5.0
  8. 6.0
  9. 7
  10. 8
  11. 9
  12. 10
  13. 11
  14. 12
  15. 13
  16. Arch

Standards

POSIX.1-2008.

History

POSIX.1-2001, 4.2BSD.

From man-pages 6.19-1 in Arch Linux 2026-11-01. Parsed by carta from the page's man source.