'\" t .\" Copyright (c) 1995 Jim Van Zandt .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" Modified 2001-12-13, Martin Schulze .\" Added ttyname_r, aeb, 2002-07-20 .\" .TH ttyname 3 2023-10-31 "Linux man-pages 6.7" .SH NAME ttyname, ttyname_r \- return name of a terminal .SH LIBRARY Standard C library .RI ( libc ", " \-lc ) .SH SYNOPSIS .nf .B #include .P .BI "char *ttyname(int " fd ); .BI "int ttyname_r(int " fd ", char " buf [. buflen "], size_t " buflen ); .fi .SH DESCRIPTION The function .BR ttyname () returns a pointer to the null-terminated pathname of the terminal device that is open on the file descriptor \fIfd\fP, or NULL on error (for example, if \fIfd\fP is not connected to a terminal). The return value may point to static data, possibly overwritten by the next call. The function .BR ttyname_r () stores this pathname in the buffer .I buf of length .IR buflen . .SH RETURN VALUE The function .BR ttyname () returns a pointer to a pathname on success. On error, NULL is returned, and .I errno is set to indicate the error. The function .BR ttyname_r () returns 0 on success, and an error number upon error. .SH ERRORS .TP .B EBADF Bad file descriptor. .TP .\" glibc commit 15e9a4f378c8607c2ae1aa465436af4321db0e23 .B ENODEV .I fd refers to a slave pseudoterminal device but the corresponding pathname could not be found (see NOTES). .TP .B ENOTTY .I fd does not refer to a terminal device. .TP .B ERANGE .RB ( ttyname_r ()) .I buflen was too small to allow storing the pathname. .SH ATTRIBUTES For an explanation of the terms used in this section, see .BR attributes (7). .TS allbox; lbx lb lb l l l. Interface Attribute Value T{ .na .nh .BR ttyname () T} Thread safety MT-Unsafe race:ttyname T{ .na .nh .BR ttyname_r () T} Thread safety MT-Safe .TE .SH STANDARDS POSIX.1-2008. .SH HISTORY POSIX.1-2001, 4.2BSD. .SH NOTES A process that keeps a file descriptor that refers to a .BR pts (4) device open when switching to another mount namespace that uses a different .I /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 .BR ttyname () or .BR ttyname_r () on the file descriptor in the new mount namespace will cause these functions to return NULL and set .I errno to .BR ENODEV . .SH SEE ALSO .BR tty (1), .BR fstat (2), .BR ctermid (3), .BR isatty (3), .BR pts (4)