---
name: "ctermid"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/ctermid"
---

# ctermid(3)

generate terminal pathname

## NAME

**ctermid**, **ctermid\_r** – generate terminal pathname

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*char* *\**\

**ctermid**(*char \*buf*);

*char* *\**\

**ctermid\_r**(*char \*buf*);

## DESCRIPTION

The **ctermid**() function generates a string, that, when used as a pathname, refers to the current controlling terminal of the calling process.

If *buf* is the NULL pointer, a pointer to a static area is returned. Otherwise, the pathname is copied into the memory referenced by *buf*. The argument *buf* is assumed to be at least L\_ctermid (as defined in the include file ⟨stdio.h⟩) bytes long.

The **ctermid\_r**() function provides the same functionality as **ctermid**() except that if *buf* is a NULL pointer, NULL is returned.

The current implementation simply returns ‘/dev/tty’.

## RETURN VALUES

The **ctermid**() function returns *buf* if it is non-NULL, otherwise it returns the address of a static buffer. The **ctermid\_r**() function always returns *buf*, even if it is the NULL pointer.

## ERRORS

The current implementation detects no error conditions.

## SEE ALSO

[ttyname(3)](/ttyname/3.md)

## STANDARDS

The **ctermid**() function conforms to IEEE Std 1003.1-1988 (“POSIX.1”).

## BUGS

By default the **ctermid**() function writes all information to an internal static object. Subsequent calls to **ctermid**() will modify the same object.
