230 lines
6.9 KiB
Groff
230 lines
6.9 KiB
Groff
.\" $NetBSD: pty.4,v 1.10 2003/08/07 10:31:03 agc Exp $
|
|
.\"
|
|
.\" Copyright (c) 1983, 1991, 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.
|
|
.\"
|
|
.\" @(#)pty.4 8.2 (Berkeley) 11/30/93
|
|
.\"
|
|
.Dd November 30, 1993
|
|
.Dt PTY 4
|
|
.Os
|
|
.Sh NAME
|
|
.Nm pty
|
|
.Nd pseudo terminal driver
|
|
.Sh SYNOPSIS
|
|
.Cd pseudo-device pty Op Ar count
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm
|
|
driver provides support for a device-pair termed a
|
|
.Em pseudo terminal .
|
|
A pseudo terminal is a pair of character devices, a
|
|
.Em master
|
|
device and a
|
|
.Em slave
|
|
device.
|
|
The slave device provides to a process an interface identical to
|
|
that described in
|
|
.Xr tty 4 .
|
|
However, whereas all other devices which provide the interface described in
|
|
.Xr tty 4
|
|
have a hardware device of some sort behind them, the slave device
|
|
has, instead, another process manipulating it through the master
|
|
half of the pseudo terminal.
|
|
That is, anything written on the master device is given to the
|
|
slave device as input and anything written on the slave device is
|
|
presented as input on the master device.
|
|
.Pp
|
|
In configuring, if an optional
|
|
.Ar count
|
|
is given in
|
|
the specification, that number of pseudo terminal pairs is initially configured;
|
|
the default count is 16. Additional pseudo terminal pairs are allocated on
|
|
as-needed basis, maximum number of them is controlled via
|
|
.Em kern.maxptys
|
|
sysctl (defaults to 992).
|
|
.Pp
|
|
The following
|
|
.Xr ioctl 2
|
|
calls apply only to pseudo terminals:
|
|
.Bl -tag -width TIOCREMOTE
|
|
.It Dv TIOCSTOP
|
|
Stops output to a terminal (e.g. like typing
|
|
.Ql ^S ) .
|
|
Takes
|
|
no parameter.
|
|
.It Dv TIOCSTART
|
|
Restarts output (stopped by
|
|
.Dv TIOCSTOP
|
|
or by typing
|
|
.Ql ^S ) .
|
|
Takes no parameter.
|
|
.It Dv TIOCPKT
|
|
Enable/disable
|
|
.Em packet
|
|
mode.
|
|
Packet mode is enabled by specifying (by reference) a nonzero
|
|
parameter and disabled by specifying (by reference) a zero parameter.
|
|
When applied to the master side of a pseudo
|
|
terminal, each subsequent
|
|
.Xr read 2
|
|
from the terminal will return data written on the slave part of
|
|
the pseudo terminal preceded by a zero byte (symbolically
|
|
defined as
|
|
.Dv TIOCPKT_DATA ) ,
|
|
or a single byte reflecting control status information.
|
|
In the latter case, the byte is an inclusive-or
|
|
of zero or more of the bits:
|
|
.Bl -tag -width TIOCPKT_FLUSHWRITE
|
|
.It Dv TIOCPKT_FLUSHREAD
|
|
whenever the read queue for the terminal is flushed.
|
|
.It Dv TIOCPKT_FLUSHWRITE
|
|
whenever the write queue for the terminal is flushed.
|
|
.It Dv TIOCPKT_STOP
|
|
whenever output to the terminal is stopped a la
|
|
.Ql ^S .
|
|
.It Dv TIOCPKT_START
|
|
whenever output to the terminal is restarted.
|
|
.It Dv TIOCPKT_DOSTOP
|
|
whenever
|
|
.Em t_stopc
|
|
is
|
|
.Ql ^S
|
|
and
|
|
.Em t_startc
|
|
is
|
|
.Ql ^Q .
|
|
.It Dv TIOCPKT_NOSTOP
|
|
whenever the start and stop characters are not
|
|
.Ql ^S/^Q .
|
|
.Pp
|
|
While this mode is in use, the presence of control status information
|
|
to be read from the master side may be detected by a
|
|
.Xr select 2
|
|
for exceptional conditions.
|
|
.Pp
|
|
This mode is used by
|
|
.Xr rlogin 1
|
|
and
|
|
.Xr rlogind 8
|
|
to implement a remote-echoed, locally
|
|
.Ql ^S/^Q
|
|
flow-controlled
|
|
remote login with proper back-flushing of output; it can be
|
|
used by other similar programs.
|
|
.It Dv TIOCPKT_IOCTL
|
|
When this bit is set, the slave has changed the
|
|
.Xr termios 4
|
|
structure (TTY state), and the remainder of the data read from
|
|
the master side of the
|
|
.Nm
|
|
is a copy of the new
|
|
.Xr termios 4
|
|
structure.
|
|
.Pp
|
|
This is used by
|
|
.Xr telnetd 8
|
|
to implement TELNET "line mode" - it allows the
|
|
.Xr telnetd 8
|
|
to detect
|
|
.Xr tty 4
|
|
state changes by the slave, and negotiate the appropriate TELNET
|
|
protocol equivalents with the remote peer.
|
|
.El
|
|
.It Dv TIOCUCNTL
|
|
Enable/disable a mode that allows a small number of simple user
|
|
.Xr ioctl 2
|
|
commands to be passed through the pseudo-terminal,
|
|
using a protocol similar to that of
|
|
.Dv TIOCPKT .
|
|
The
|
|
.Dv TIOCUCNTL
|
|
and
|
|
.Dv TIOCPKT
|
|
modes are mutually exclusive.
|
|
This mode is enabled from the master side of a pseudo terminal
|
|
by specifying (by reference)
|
|
a nonzero parameter and disabled by specifying (by reference)
|
|
a zero parameter.
|
|
Each subsequent
|
|
.Xr read 2
|
|
from the master side will return data written on the slave part of
|
|
the pseudo terminal preceded by a zero byte,
|
|
or a single byte reflecting a user control operation on the slave side.
|
|
A user control command consists of a special
|
|
.Xr ioctl 2
|
|
operation with no data; the command is given as
|
|
.Dv UIOCCMD Ns (n) ,
|
|
where
|
|
.Ar n
|
|
is a number in the range 1-255.
|
|
The operation value
|
|
.Ar n
|
|
will be received as a single byte on the next
|
|
.Xr read 2
|
|
from the master side.
|
|
The
|
|
.Xr ioctl 2
|
|
.Dv UIOCCMD Ns (0)
|
|
is a no-op that may be used to probe for
|
|
the existence of this facility.
|
|
As with
|
|
.Dv TIOCPKT
|
|
mode, command operations may be detected with a
|
|
.Xr select 2
|
|
for exceptional conditions.
|
|
.It Dv TIOCREMOTE
|
|
A mode for the master half of a pseudo terminal, independent
|
|
of
|
|
.Dv TIOCPKT .
|
|
This mode causes input to the pseudo terminal to be flow controlled
|
|
and not input edited (regardless of the terminal mode).
|
|
Each write to the control terminal produces a record boundary for
|
|
the process reading the terminal.
|
|
In normal usage, a write of data is like the data typed as a line
|
|
on the terminal; a write of 0 bytes is like typing an end-of-file
|
|
character.
|
|
.Dv TIOCREMOTE
|
|
can be used when doing remote line
|
|
editing in a window manager, or whenever flow controlled input
|
|
is required.
|
|
.El
|
|
.Sh FILES
|
|
.Bl -tag -width /dev/tty[p-zP-T][0-9a-zA-Z]x -compact
|
|
.It Pa /dev/pty[p-zP-T][0-9a-zA-Z]
|
|
master pseudo terminals
|
|
.It Pa /dev/tty[p-zP-T][0-9a-zA-Z]
|
|
slave pseudo terminals
|
|
.El
|
|
.Sh DIAGNOSTICS
|
|
None.
|
|
.Sh HISTORY
|
|
The
|
|
.Nm
|
|
driver appeared in
|
|
.Bx 4.2 .
|