PTY(4D) Devices PTY(4D)

NAME


pty - legacy pseudo-terminal driver

SYNOPSIS


/dev/pty[p-r]*

/dev/tty[p-r]*

DESCRIPTION


This driver provides support for legacy static pseudo-terminal devices.
Modern software does not use this driver, preferring instead the
STREAMS-based ptm(4D) and pts(4D) pseudo-terminal drivers, consumed
through the portable posix_openpt(3C) interface.

The pty driver provides support for a pair of devices collectively
known as a pseudo-terminal. The two devices comprising a pseudo-
terminal are known as a manager and a subsidiary. The subsidiary
device distinguishes between the B0 baud rate and other baud rates
specified in the c_cflag field of the termios structure, and the CLOCAL
flag in that member. It does not support any of the other termio(4I)
device control functions specified by flags in the c_cflag field of the
termios structure and by the IGNBRK, IGNPAR, PARMRK, or INPCK flags in
the c_iflag field of the termios structure, as these functions apply
only to asynchronous serial ports. All other termio(4I) functions must
be performed by STREAMS modules pushed atop the driver; when a
subsidiary device is opened, the ldterm(4M) and ttcompat(4M) STREAMS
modules are automatically pushed on top of the stream, providing the
standard termio(4I) interface.

Instead of having a hardware interface and associated hardware that
supports the terminal functions, the functions are implemented by
another process manipulating the manager device of the pseudo-terminal.

The manager and the subsidiary devices of the pseudo-terminal are
tightly connected. Any data written on the manager device is given to
the subsidiary device as input, as though it had been received from a
hardware interface. Any data written on the subsidiary terminal can be
read from the manager device (rather than being transmitted from a
UAR).

The driver is statically configured to provide 48 pseudo-terminal
pairs. Software that requires dynamic pseudo-terminal devices, or a
greater number of devices, must be converted to use ptm(4D).

IOCTLS


The standard set of termio(4I) ioctls are supported by the subsidiary
device. None of the bits in the c_cflag field have any effect on the
pseudo-terminal, except that if the baud rate is set to B0, it will
appear to the process on the manager device as if the last process on
the subsidiary device had closed the line; thus, setting the baud rate
to B0 has the effect of "hanging up" the pseudo-terminal, just as it
has the effect of "hanging up" a real terminal.

There is no notion of "parity" on a pseudo-terminal, so none of the
flags in the c_iflag field that control the processing of parity errors
have any effect. Similarly, there is no notion of a break, so none of
the flags that control the processing of breaks, and none of the ioctls
that generate breaks, have any effect.

Input flow control is automatically performed; a process that attempts
to write to the manager device will be blocked if too much unconsumed
data is buffered on the subsidiary device. The input flow control
provided by the IXOFF flag in the c_iflag field is not supported.

The delays specified in the c_oflag field are not supported.

As there are no modems involved in a pseudo-terminal, the ioctls that
return or alter the state of modem control lines are silently ignored.

A few special ioctls are provided on the manager devices of pseudo-
terminals to provide the functionality needed by applications programs
to emulate real hardware interfaces:

TIOCSTOP
The argument is ignored. Output to the pseudo-terminal is
suspended, as if a STOP character had been typed.

TIOCSTART
The argument is ignored. Output to the pseudo-terminal is
restarted, as if a START character had been typed.

TIOCPKT
The argument is a pointer to an int. If the value of the int
is non-zero, packet mode is enabled; if the value of the int is
zero, packet mode is disabled. When a pseudo-terminal is in
packet mode, each subsequent read(2) from the manager device
will return data written on the subsidiary device preceded by a
zero byte (symbolically defined as 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:

TIOCPKT_FLUSHREAD
Whenever the read queue for the terminal is flushed.

TIOCPKT_FLUSHWRITE
Whenever the write queue for the terminal is flushed.

TIOCPKT_STOP
Whenever output to the terminal is stopped using ^S.

TIOCPKT_START
Whenever output to the terminal is restarted.

TIOCPKT_DOSTOP
Whenever XON/XOFF flow control is enabled after being
disabled; it is considered "enabled" when the IXON flag
in the c_iflag field is set, the VSTOP member of the
c_cc array is ^S and the VSTART member of the c_cc
array is ^Q.

TIOCPKT_NOSTOP
Whenever XON/XOFF flow control is disabled after being
enabled.

TIOCREMOTE
The argument is a pointer to an int. If the value of the int
is non-zero, remote mode is enabled; if the value of the int is
zero, remote mode is disabled. This mode can be enabled or
disabled independently of packet mode. When a pseudo-terminal
is in remote mode, input to the subsidiary device of the
pseudo-terminal is flow controlled and not input edited
(regardless of the mode the subsidiary side of the pseudo-
terminal).

Each write to the manager device produces a record boundary for
the process reading the subsidiary device. 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 EOF character. Note: this
means that a process writing to a pseudo-terminal manager in
remote mode must keep track of line boundaries, and write only
one line at a time to the manager.

If, for example, it were to buffer up several newline
characters and write them to the manager with one write(2), it
would appear to a process reading from the subsidiary as if a
single line containing several newline characters had been
typed (as if, for example, a user had typed the literal next
(LNEXT) character before typing all but the last of those
newline characters). Remote mode can be used when doing remote
line editing in a window manager, or whenever flow controlled
input is required.

FILES


/dev/pty[p-r][0-9a-f] Pseudo-terminal manager devices.

/dev/tty[p-r][0-9a-f] Pseudo-terminal subsidiary devices.

SEE ALSO


rlogin(1), posix_openpt(3C), ptm(4D), termio(4I), ldterm(4M),
ttcompat(4M), rlogind(8)

NOTES


This is a legacy device and should not be used by new software.

It is apparently not possible to send an EOT by writing zero bytes in
TIOCREMOTE mode.

illumos August 19, 2022 illumos

tribblix@gmail.com :: GitHub :: Privacy