.\" Copyright (c) 1995 Jim Van Zandt <jrv@vanzandt.mv.com>
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, see
.\" <http://www.gnu.org/licenses/>.
.\" %%%LICENSE_END
.\"
.\" Modified 2001-12-13, Martin Schulze <joey@infodrom.org>
.\" Added ttyname_r, aeb, 2002-07-20
.\"
.TH TTYNAME 3 2019-10-10 "Linux" "Linux Programmer's Manual"
.SH NAME
ttyname, ttyname_r \- return name of a terminal
.SH SYNOPSIS
.nf
.B #include <unistd.h>
.PP
.BI "char *ttyname(int " fd );
.PP
.BI "int ttyname_r(int " fd ", char *" buf ", 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 appropriately.
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 the terminal end of a pseudoterminal device pair
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;
lb lb lb
l l l.
Interface	Attribute	Value
T{
.BR ttyname ()
T}	Thread safety	MT-Unsafe race:ttyname
T{
.BR ttyname_r ()
T}	Thread safety	MT-Safe
.TE
.SH CONFORMING TO
POSIX.1-2001, POSIX.1-2008, 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)
