1998-08-16 20:49:54 +04:00
|
|
|
.\" $NetBSD: tty.4,v 1.8 1998/08/16 16:49:54 kleink Exp $
|
1994-11-30 19:22:03 +03:00
|
|
|
.\"
|
1994-11-30 18:26:55 +03:00
|
|
|
.\" Copyright (c) 1991, 1992, 1993
|
|
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
|
|
.\" must display the following acknowledgement:
|
|
|
|
.\" This product includes software developed by the University of
|
|
|
|
.\" California, Berkeley and its contributors.
|
|
|
|
.\" 4. Neither the name of the University nor the names of its contributors
|
|
|
|
.\" may be used to endorse or promote products derived from this software
|
|
|
|
.\" without specific prior written permission.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
.\" SUCH DAMAGE.
|
|
|
|
.\"
|
|
|
|
.\" @(#)tty.4 8.3 (Berkeley) 4/19/94
|
|
|
|
.\"
|
|
|
|
.Dd August 14, 1992
|
|
|
|
.Dt TTY 4
|
|
|
|
.Os BSD 4
|
|
|
|
.Sh NAME
|
|
|
|
.Nm tty
|
|
|
|
.Nd general terminal interface
|
|
|
|
.Sh SYNOPSIS
|
|
|
|
.Fd #include <sys/ioctl.h>
|
|
|
|
.Sh DESCRIPTION
|
|
|
|
This section describes the interface to the terminal drivers
|
|
|
|
in the system.
|
|
|
|
.Ss Terminal Special Files
|
|
|
|
Each hardware terminal port on the system usually has a terminal special device
|
|
|
|
file associated with it in the directory ``/dev/'' (for
|
|
|
|
example, ``/dev/tty03'').
|
|
|
|
When a user logs into
|
|
|
|
the system on one of these hardware terminal ports, the system has already
|
|
|
|
opened the associated device and prepared the line for normal interactive
|
|
|
|
use (see
|
|
|
|
.Xr getty 8 .)
|
|
|
|
There is also a special case of a terminal file that connects not to
|
|
|
|
a hardware terminal port, but to another program on the other side.
|
|
|
|
These special terminal devices are called
|
|
|
|
.Em ptys
|
|
|
|
and provide the mechanism necessary to give users the same interface to the
|
|
|
|
system when logging in over a network (using
|
|
|
|
.Xr rlogin 1 ,
|
|
|
|
or
|
|
|
|
.Xr telnet 1
|
|
|
|
for example.) Even in these cases the details of how the terminal
|
|
|
|
file was opened and set up is already handled by special software
|
|
|
|
in the system.
|
|
|
|
Thus, users do not normally need to worry about the details of
|
|
|
|
how these lines are opened or used. Also, these lines are often used
|
|
|
|
for dialing out of a system (through an out-calling modem), but again
|
|
|
|
the system provides programs that hide the details of accessing
|
|
|
|
these terminal special files (see
|
1998-04-30 12:50:03 +04:00
|
|
|
.Xr tip 1 ) .
|
1994-11-30 18:26:55 +03:00
|
|
|
.Pp
|
|
|
|
When an interactive user logs in, the system prepares the line to
|
|
|
|
behave in a certain way (called a
|
|
|
|
.Em "line discipline" ) ,
|
|
|
|
the particular details of which is described in
|
|
|
|
.Xr stty 1
|
|
|
|
at the command level, and in
|
|
|
|
.Xr termios 4
|
|
|
|
at the programming level. A user may be concerned with changing
|
|
|
|
settings associated with his particular login terminal and should refer
|
|
|
|
to the preceding man pages for the common cases. The remainder of
|
|
|
|
this man page is concerned
|
|
|
|
with describing details of using and controlling terminal devices
|
|
|
|
at a low level, such as that possibly required by a program wishing
|
|
|
|
to provide features similar to those provided by the system.
|
|
|
|
.Ss Line disciplines
|
|
|
|
A terminal file is used like any other file in the system in that
|
|
|
|
it can be opened, read, and written to using standard system
|
|
|
|
calls. For each existing terminal file, there is a software processing module
|
|
|
|
called a
|
|
|
|
.Em "line discipline"
|
|
|
|
is associated with it. The
|
|
|
|
.Em "line discipline"
|
|
|
|
essentially glues the low level device driver code with the high
|
|
|
|
level generic interface routines (such as
|
|
|
|
.Xr read 2
|
|
|
|
and
|
|
|
|
.Xr write 2 ),
|
|
|
|
and is responsible for implementing the semantics associated
|
|
|
|
with the device. When a terminal file is first opened by a program,
|
|
|
|
the default
|
|
|
|
.Em "line discipline"
|
|
|
|
called the
|
|
|
|
.Dv termios
|
|
|
|
line discipline is associated with the file. This is the primary
|
|
|
|
line discipline that is used in most cases and provides the semantics
|
|
|
|
that users normally associate with a terminal. When the
|
|
|
|
.Dv termios
|
|
|
|
line discipline is in effect, the terminal file behaves and is
|
|
|
|
operated according to the rules described in
|
|
|
|
.Xr termios 4 .
|
|
|
|
Please refer to that man page for a full description of the terminal
|
|
|
|
semantics.
|
|
|
|
The operations described here
|
|
|
|
generally represent features common
|
|
|
|
across all
|
|
|
|
.Em "line disciplines" ,
|
|
|
|
however some of these calls may not
|
|
|
|
make sense in conjunction with a line discipline other than
|
|
|
|
.Dv termios ,
|
|
|
|
and some may not be supported by the underlying
|
|
|
|
hardware (or lack thereof, as in the case of ptys).
|
|
|
|
.Ss Terminal File Operations
|
|
|
|
All of the following operations are invoked using the
|
|
|
|
.Xr ioctl 2
|
|
|
|
system call. Refer to that man page for a description of
|
|
|
|
the
|
|
|
|
.Em request
|
|
|
|
and
|
|
|
|
.Em argp
|
|
|
|
parameters.
|
|
|
|
In addition to the ioctl
|
|
|
|
.Em requests
|
|
|
|
defined here, the specific line discipline
|
|
|
|
in effect will define other
|
|
|
|
.Em requests
|
|
|
|
specific to it (actually
|
|
|
|
.Xr termios 4
|
|
|
|
defines them as function calls, not ioctl
|
|
|
|
.Em requests . )
|
|
|
|
The following section lists the available ioctl requests. The
|
|
|
|
name of the request, a description of its purpose, and the typed
|
|
|
|
.Em argp
|
|
|
|
parameter (if any)
|
|
|
|
are listed. For example, the first entry says
|
|
|
|
.Pp
|
|
|
|
.D1 Em "TIOCSETD int *ldisc"
|
|
|
|
.Pp
|
|
|
|
and would be called on the terminal associated with
|
|
|
|
file descriptor zero by the following code fragment:
|
|
|
|
.Bd -literal
|
|
|
|
int ldisc;
|
|
|
|
|
|
|
|
ldisc = TTYDISC;
|
|
|
|
ioctl(0, TIOCSETD, &ldisc);
|
|
|
|
.Ed
|
|
|
|
.Ss Terminal File Request Descriptions
|
|
|
|
.Bl -tag -width TIOCGWINSZ
|
|
|
|
.It Dv TIOCSETD Fa int *ldisc
|
|
|
|
Change to the new line discipline pointed to by
|
|
|
|
.Fa ldisc .
|
|
|
|
The available line disciplines are listed in
|
1996-03-19 07:26:01 +03:00
|
|
|
.Pa Aq sys/ttycom.h
|
1994-11-30 18:26:55 +03:00
|
|
|
and currently are:
|
|
|
|
.Pp
|
|
|
|
.Bl -tag -width TIOCGWINSZ -compact
|
|
|
|
.It TTYDISC
|
|
|
|
Termios interactive line discipline.
|
|
|
|
.It TABLDISC
|
|
|
|
Tablet line discipline.
|
|
|
|
.It SLIPDISC
|
|
|
|
Serial IP line discipline.
|
1996-03-19 07:26:01 +03:00
|
|
|
.It PPPDISC
|
|
|
|
Point to Point Protocol line discipline.
|
1997-04-03 04:56:29 +04:00
|
|
|
.It STRIPDISC
|
|
|
|
Starmode Radio IP line discipline.
|
1994-11-30 18:26:55 +03:00
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
.It Dv TIOCGETD Fa int *ldisc
|
|
|
|
Return the current line discipline in the integer pointed to by
|
|
|
|
.Fa ldisc .
|
|
|
|
.It Dv TIOCSBRK Fa void
|
|
|
|
Set the terminal hardware into BREAK condition.
|
|
|
|
.It Dv TIOCCBRK Fa void
|
|
|
|
Clear the terminal hardware BREAK condition.
|
|
|
|
.It Dv TIOCSDTR Fa void
|
|
|
|
Assert data terminal ready (DTR).
|
|
|
|
.It Dv TIOCCDTR Fa void
|
|
|
|
Clear data terminal ready (DTR).
|
|
|
|
.It Dv TIOCGPGRP Fa int *tpgrp
|
|
|
|
Return the current process group the terminal is associated
|
|
|
|
with in the integer pointed to by
|
|
|
|
.Fa tpgrp .
|
|
|
|
This is the underlying call that implements the
|
|
|
|
.Xr termios 4
|
|
|
|
.Fn tcgetattr
|
|
|
|
call.
|
|
|
|
.It Dv TIOCSPGRP Fa int *tpgrp
|
|
|
|
Associate the terminal with the process group (as an integer) pointed to by
|
|
|
|
.Fa tpgrp .
|
|
|
|
This is the underlying call that implements the
|
|
|
|
.Xr termios 4
|
|
|
|
.Fn tcsetattr
|
|
|
|
call.
|
|
|
|
.It Dv TIOCGETA Fa struct termios *term
|
|
|
|
Place the current value of the termios state associated with the
|
|
|
|
device in the termios structure pointed to by
|
|
|
|
.Fa term .
|
|
|
|
This is the underlying call that implements the
|
|
|
|
.Xr termios 4
|
|
|
|
.Fn tcgetattr
|
|
|
|
call.
|
|
|
|
.It Dv TIOCSETA Fa struct termios *term
|
|
|
|
Set the termios state associated with the device immediately.
|
|
|
|
This is the underlying call that implements the
|
|
|
|
.Xr termios 4
|
|
|
|
.Fn tcsetattr
|
|
|
|
call with the
|
|
|
|
.Dv TCSANOW
|
|
|
|
option.
|
|
|
|
.It Dv TIOCSETAW Fa struct termios *term
|
|
|
|
First wait for any output to complete, then set the termios state
|
|
|
|
associated with the device.
|
|
|
|
This is the underlying call that implements the
|
|
|
|
.Xr termios 4
|
|
|
|
.Fn tcsetattr
|
|
|
|
call with the
|
|
|
|
.Dv TCSADRAIN
|
|
|
|
option.
|
|
|
|
.It Dv TIOCSETAF Fa struct termios *term
|
|
|
|
First wait for any output to complete, clear any pending input,
|
|
|
|
then set the termios state associated with the device.
|
|
|
|
This is the underlying call that implements the
|
|
|
|
.Xr termios 4
|
|
|
|
.Fn tcsetattr
|
|
|
|
call with the
|
|
|
|
.Dv TCSAFLUSH
|
|
|
|
option.
|
|
|
|
.It Dv TIOCOUTQ Fa int *num
|
|
|
|
Place the current number of characters in the output queue in the
|
|
|
|
integer pointed to by
|
|
|
|
.Fa num .
|
|
|
|
.It Dv TIOCSTI Fa char *cp
|
|
|
|
Simulate typed input. Pretend as if the terminal received the
|
|
|
|
character pointed to by
|
|
|
|
.Fa cp .
|
|
|
|
.It Dv TIOCNOTTY Fa void
|
|
|
|
This call is obsolete but left for compatibility. In the past, when
|
|
|
|
a process that didn't have a controlling terminal (see
|
|
|
|
.Em The Controlling Terminal
|
|
|
|
in
|
|
|
|
.Xr termios 4 )
|
|
|
|
first opened a terminal device, it acquired that terminal as its
|
|
|
|
controlling terminal. For some programs this was a hazard as they
|
|
|
|
didn't want a controlling terminal in the first place, and this
|
|
|
|
provided a mechanism to disassociate the controlling terminal from
|
|
|
|
the calling process. It
|
|
|
|
.Em must
|
|
|
|
be called by opening the file
|
|
|
|
.Pa /dev/tty
|
|
|
|
and calling
|
|
|
|
.Dv TIOCNOTTY
|
|
|
|
on that file descriptor.
|
|
|
|
.Pp
|
|
|
|
The current system does not allocate a controlling terminal to
|
|
|
|
a process on an
|
|
|
|
.Fn open
|
|
|
|
call: there is a specific ioctl called
|
1998-02-16 23:16:51 +03:00
|
|
|
.Dv TIOCSCTTY
|
1994-11-30 18:26:55 +03:00
|
|
|
to make a terminal the controlling
|
|
|
|
terminal.
|
|
|
|
In addition, a program can
|
|
|
|
.Fn fork
|
|
|
|
and call the
|
|
|
|
.Fn setsid
|
|
|
|
system call which will place the process into its own session - which
|
|
|
|
has the effect of disassociating it from the controlling terminal. This
|
|
|
|
is the new and preferred method for programs to lose their controlling
|
|
|
|
terminal.
|
|
|
|
.It Dv TIOCSTOP Fa void
|
|
|
|
Stop output on the terminal (like typing ^S at the keyboard).
|
|
|
|
.It Dv TIOCSTART Fa void
|
|
|
|
Start output on the terminal (like typing ^Q at the keyboard).
|
|
|
|
.It Dv TIOCSCTTY Fa void
|
|
|
|
Make the terminal the controlling terminal for the process (the process
|
|
|
|
must not currently have a controlling terminal).
|
|
|
|
.It Dv TIOCDRAIN Fa void
|
|
|
|
Wait until all output is drained.
|
|
|
|
.It Dv TIOCEXCL Fa void
|
|
|
|
Set exclusive use on the terminal. No further opens are permitted
|
|
|
|
except by root. Of course, this means that programs that are run by
|
|
|
|
root (or setuid) will not obey the exclusive setting - which limits
|
|
|
|
the usefulness of this feature.
|
|
|
|
.It Dv TIOCNXCL Fa void
|
|
|
|
Clear exclusive use of the terminal. Further opens are permitted.
|
|
|
|
.It Dv TIOCFLUSH Fa int *what
|
|
|
|
If the value of the int pointed to by
|
|
|
|
.Fa what
|
|
|
|
contains the
|
|
|
|
.Dv FREAD
|
|
|
|
bit as defined in
|
1998-08-16 20:49:54 +04:00
|
|
|
.Pa Aq sys/fcntl.h ,
|
1994-11-30 18:26:55 +03:00
|
|
|
then all characters in the input queue are cleared. If it contains
|
|
|
|
the
|
|
|
|
.Dv FWRITE
|
|
|
|
bit, then all characters in the output queue are cleared. If the
|
|
|
|
value of the integer is zero, then it behaves as if both the
|
|
|
|
.Dv FREAD
|
|
|
|
and
|
|
|
|
.Dv FWRITE
|
|
|
|
bits were set (i.e. clears both queues).
|
|
|
|
.It Dv TIOCGWINSZ Fa struct winsize *ws
|
|
|
|
Put the window size information associated with the terminal in the
|
|
|
|
.Va winsize
|
|
|
|
structure pointed to by
|
|
|
|
.Fa ws .
|
|
|
|
The window size structure contains the number of rows and columns (and pixels
|
|
|
|
if appropriate) of the devices attached to the terminal. It is set by user software
|
|
|
|
and is the means by which most full\&-screen oriented programs determine the
|
|
|
|
screen size. The
|
|
|
|
.Va winsize
|
|
|
|
structure is defined in
|
|
|
|
.Pa Aq sys/ioctl.h .
|
|
|
|
.It Dv TIOCSWINSZ Fa struct winsize *ws
|
|
|
|
Set the window size associated with the terminal to be the value in
|
|
|
|
the
|
|
|
|
.Va winsize
|
|
|
|
structure pointed to by
|
|
|
|
.Fa ws
|
|
|
|
(see above).
|
|
|
|
.It Dv TIOCCONS Fa int *on
|
|
|
|
If
|
|
|
|
.Fa on
|
|
|
|
points to a non-zero integer, redirect kernel console output (kernel printf's)
|
|
|
|
to this terminal.
|
|
|
|
If
|
|
|
|
.Fa on
|
|
|
|
points to a zero integer, redirect kernel console output back to the normal
|
|
|
|
console. This is usually used on workstations to redirect kernel messages
|
|
|
|
to a particular window.
|
|
|
|
.It Dv TIOCMSET Fa int *state
|
|
|
|
The integer pointed to by
|
|
|
|
.Fa state
|
|
|
|
contains bits that correspond to modem state. Following is a list
|
|
|
|
of defined variables and the modem state they represent:
|
|
|
|
.Pp
|
|
|
|
.Bl -tag -width TIOCMXCTS -compact
|
|
|
|
.It TIOCM_LE
|
|
|
|
Line Enable.
|
|
|
|
.It TIOCM_DTR
|
|
|
|
Data Terminal Ready.
|
|
|
|
.It TIOCM_RTS
|
|
|
|
Request To Send.
|
|
|
|
.It TIOCM_ST
|
|
|
|
Secondary Transmit.
|
|
|
|
.It TIOCM_SR
|
|
|
|
Secondary Receive.
|
|
|
|
.It TIOCM_CTS
|
|
|
|
Clear To Send.
|
|
|
|
.It TIOCM_CAR
|
|
|
|
Carrier Detect.
|
|
|
|
.It TIOCM_CD
|
|
|
|
Carier Detect (synonym).
|
|
|
|
.It TIOCM_RNG
|
|
|
|
Ring Indication.
|
|
|
|
.It TIOCM_RI
|
|
|
|
Ring Indication (synonym).
|
|
|
|
.It TIOCM_DSR
|
|
|
|
Data Set Ready.
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
This call sets the terminal modem state to that represented by
|
|
|
|
.Fa state .
|
|
|
|
Not all terminals may support this.
|
|
|
|
.It Dv TIOCMGET Fa int *state
|
|
|
|
Return the current state of the terminal modem lines as represented
|
|
|
|
above in the integer pointed to by
|
|
|
|
.Fa state .
|
|
|
|
.It Dv TIOCMBIS Fa int *state
|
|
|
|
The bits in the integer pointed to by
|
|
|
|
.Fa state
|
|
|
|
represent modem state as described above, however the state is OR-ed
|
|
|
|
in with the current state.
|
|
|
|
.It Dv TIOCMBIC Fa int *state
|
|
|
|
The bits in the integer pointed to by
|
|
|
|
.Fa state
|
|
|
|
represent modem state as described above, however each bit which is on
|
|
|
|
in
|
|
|
|
.Fa state
|
|
|
|
is cleared in the terminal.
|
1996-03-17 10:13:40 +03:00
|
|
|
.It Dv TIOCSFLAGS Fa int *state
|
|
|
|
The bits in the integer pointed to by
|
|
|
|
.Fa state
|
|
|
|
contain bits that correspond to serial port state. Following is a list
|
|
|
|
of defined variables and the serial port state they represent:
|
|
|
|
.Pp
|
|
|
|
.Bl -tag -width TIOCFLAG_SOFTCAR -compact
|
|
|
|
.It TIOCFLAG_SOFTCAR
|
|
|
|
Ignore hardware carrier.
|
|
|
|
.It TIOCFLAG_CLOCAL
|
|
|
|
Set clocal on open.
|
|
|
|
.It TIOCFLAG_CRTSCTS
|
|
|
|
Set crtscts on open.
|
|
|
|
.It TIOCFLAG_MDMBUF
|
|
|
|
Set mdmbuf on open.
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
This call sets the serial port state to that represented by
|
|
|
|
.Fa state .
|
|
|
|
Not all serial ports may support this.
|
|
|
|
.It Dv TIOCGFLAGS Fa int *state
|
|
|
|
Return the current state of the serial port as represented
|
|
|
|
above in the integer pointed to by
|
|
|
|
.Fa state .
|
1994-11-30 18:26:55 +03:00
|
|
|
.El
|
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr getty 8 ,
|
|
|
|
.Xr ioctl 2 ,
|
|
|
|
.Xr pty 4 ,
|
|
|
|
.Xr stty 1 ,
|
|
|
|
.Xr termios 4
|