1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
'\" t
.\" Copyright (c) 1995 Jim Van Zandt <jrv@vanzandt.mv.com>
.\"
.\" SPDX-License-Identifier: GPL-2.0-or-later
.\"
.\" Modified 2001-12-13, Martin Schulze <joey@infodrom.org>
.\" Added ttyname_r, aeb, 2002-07-20
.\"
.TH ttyname 3 2023-07-20 "Linux man-pages 6.05.01"
.SH NAME
ttyname, ttyname_r \- return name of a terminal
.SH LIBRARY
Standard C library
.RI ( libc ", " \-lc )
.SH SYNOPSIS
.nf
.B #include <unistd.h>
.PP
.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
.sp 1
.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)
|