486 lines
15 KiB
Groff
486 lines
15 KiB
Groff
.\" $NetBSD: tty.4,v 1.28 2011/09/24 00:06:20 christos Exp $
|
|
.\"
|
|
.\" 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. 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 September 9, 2011
|
|
.Dt TTY 4
|
|
.Os
|
|
.Sh NAME
|
|
.Nm tty
|
|
.Nd general terminal interface
|
|
.Sh SYNOPSIS
|
|
.In 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 two terminal special
|
|
device files associated with it in the directory
|
|
.Pa /dev/
|
|
(for example,
|
|
.Pa /dev/tty03
|
|
and
|
|
.Pa /dev/dty03 ) .
|
|
.Pp
|
|
The
|
|
.Pa /dev/ttyXX
|
|
special file is used for dial-in modems and terminals.
|
|
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 ) .
|
|
.Pp
|
|
The
|
|
.Pa /dev/dtyXX
|
|
special file is a SunOS-compatible dial-out device.
|
|
Unlike the dial-in device, opening the dial-out device never blocks.
|
|
If the corresponding dial-in device is already opened (not blocked
|
|
in the open waiting for carrier), then the dial-out open will fail
|
|
immediately; otherwise it will succeed immediately.
|
|
While the dial-out device is open, the dial-in device may not be opened.
|
|
If the dial-in open is blocking, it will wait until the dial-out
|
|
device is closed (and carrier is detected); otherwise it will fail immediately.
|
|
.Pp
|
|
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
|
|
(pseudo terminals)
|
|
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
|
|
.Xr tip 1 ) .
|
|
.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
|
|
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 TIOCSLINED char name[32]
|
|
.Pp
|
|
and would be called on the terminal associated with
|
|
file descriptor zero by the following code fragment:
|
|
.Bd -literal
|
|
ioctl(0, TIOCSLINED, "termios");
|
|
.Ed
|
|
.Ss Terminal File Request Descriptions
|
|
.Bl -tag -width TIOCGWINSZ
|
|
.It Dv TIOCSLINED Fa char name[32]
|
|
Change to the new line discipline called
|
|
.Fa name .
|
|
.Pp
|
|
.It Dv TIOCGLINED Fa char name[32]
|
|
Return the current line discipline in the string pointed to by
|
|
.Fa name .
|
|
.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 tcgetpgrp 3
|
|
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 tcsetpgrp 3
|
|
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 tcgetattr 3
|
|
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 tcsetattr 3
|
|
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 tcsetattr 3
|
|
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 tcsetattr 3
|
|
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
|
|
.Dv TIOCSCTTY
|
|
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
|
|
.In sys/fcntl.h ,
|
|
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
|
|
.In 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 TIOCGQSIZE Fa int *qsize
|
|
Get the current size of the tty input and output queues.
|
|
.It Dv TIOCSQSIZE Fa int *qsize
|
|
Set the size of the tty input and output queues.
|
|
Valid sizes are between
|
|
.Dv 1024
|
|
and
|
|
.Dv 65536
|
|
and input values are converted to a power of two.
|
|
All pending input and output is dropped.
|
|
.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
|
|
Carrier 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.
|
|
.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 flag values and the serial port state they
|
|
represent:
|
|
.Pp
|
|
.Bl -tag -width TIOCFLAG_SOFTCAR -compact
|
|
.It TIOCFLAG_SOFTCAR
|
|
Ignore hardware carrier.
|
|
.It TIOCFLAG_CLOCAL
|
|
Set the
|
|
.Xr termios 4
|
|
.Dv CLOCAL
|
|
flag on open.
|
|
.It TIOCFLAG_CRTSCTS
|
|
Set the
|
|
.Xr termios 4
|
|
.Dv CRTSCTS
|
|
flag on open.
|
|
.It TIOCFLAG_MDMBUF
|
|
Set the
|
|
.Xr termios 4
|
|
.Dv MDMBUF
|
|
flag 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 .
|
|
.El
|
|
.Sh COMPATIBILITY
|
|
Two ioctls are maintained for backwards compatibility.
|
|
They provide methods to get and set the current line discipline,
|
|
but are not extensible.
|
|
.Bl -tag -width TIOCGWINSZ
|
|
.It Dv TIOCSETD Fa int *ldisc
|
|
Change to the new line discipline pointed to by
|
|
.Fa ldisc .
|
|
The old list of available line disciplines are listed in
|
|
.In sys/ttycom.h
|
|
and are:
|
|
.Pp
|
|
.Bl -tag -width TIOCGWINSZ -compact
|
|
.It TTYDISC
|
|
Termios interactive line discipline.
|
|
.It TABLDISC
|
|
Tablet line discipline.
|
|
.It SLIPDISC
|
|
Serial IP line discipline.
|
|
.It PPPDISC
|
|
Point to Point Protocol line discipline.
|
|
.It STRIPDISC
|
|
Starmode Radio IP line discipline.
|
|
.El
|
|
.Pp
|
|
.It Dv TIOCGETD Fa int *ldisc
|
|
Return the current line discipline in the integer pointed to by
|
|
.Fa ldisc .
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr stty 1 ,
|
|
.Xr ioctl 2 ,
|
|
.Xr tcgetattr 3 ,
|
|
.Xr tcsetattr 3 ,
|
|
.Xr ttyaction 3 ,
|
|
.Xr pty 4 ,
|
|
.Xr termios 4 ,
|
|
.Xr ttys 5 ,
|
|
.Xr getty 8 ,
|
|
.Xr linedisc 9
|
|
.Sh HISTORY
|
|
Separate dial-out device files were implemented in SunOS 4.
|
|
They were cloned by
|
|
.An Charles M. Hannum
|
|
for
|
|
.Nx 1.4 .
|