Devices pty(7D)
NAME
pty - pseudo-terminal driver
DESCRIPTION
The pty driver provides support for a pair of devices col-
lectively known as a pseudo-terminal. The two devices
comprising a pseudo-terminal are known as a controller and a
slave. The slave device distinguishes between the B0 baud
rate and other baud rates specified in the ccflag word of
the termios structure, and the CLOCAL flag in that word. It
does not support any of the other termio(7I) device control
functions specified by flags in the ccflag word of the ter-
mios structure and by the IGNBRK, IGNPAR, PARMRK, or
INPCK flags in the ciflag word of the termios structure, as
these functions apply only to asynchronous serial ports.
All other termio(7I) functions must be performed by STREAMS
modules pushed atop the driver; when a slave device is
opened, the ldterm(7M) and ttcompat(7M) STREAMS modules are
automatically pushed on top of the stream, providing the
standard termio(7I) interface.
Instead of having a hardware interface and associated
hardware that supports the terminal functions, the functions
are implemented by another process manipulating the con-
troller device of the pseudo-terminal.
The controller and the slave devices of the pseudo-terminal
are tightly connected. Any data written on the controller
device is given to the slave device as input, as though it
had been received from a hardware interface. Any data writ-
ten on the slave terminal can be read from the controller
device (rather than being transmitted from a UAR).
By default, 48 pseudo-terminal pairs are configured as fol-
lows:
/dev/pty[p-r][0-9a-f] controller devices
/dev/tty[p-r][0-9a-f] slave devices
IOCTLS
The standard set of termio ioctls are supported by the slave
device. None of the bits in the ccflag word 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 con-
troller device as if the last process on the slave 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.
SunOS 5.11 Last change: 8 Aug 1994 1
Devices pty(7D)
There is no notion of ``parity'' on a pseudo-terminal, so
none of the flags in the ciflag word that control the pro-
cessing of parity errors have any effect. Similarly, there
is no notion of a ``break'', so none of the flags that con-
trol 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 controller device will be
blocked if too much unconsumed data is buffered on the slave
device. The input flow control provided by the IXOF flag
in the ciflag word is not supported.
The delays specified in the coflag word 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 controller 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 controller device will return
data written on the slave device preceded by a
zero byte (symbolically defined as
TIOCPKTDATA), 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:
TIOCPKTFLUSHREAD whenever the read queue
for the terminal is
SunOS 5.11 Last change: 8 Aug 1994 2
Devices pty(7D)
flushed.
TIOCPKTFLUSHWRITE whenever the write queue
for the terminal is
flushed.
TIOCPKTSTOP whenever output to the
terminal is stopped
using ^S.
TIOCPKTSTART whenever output to the
terminal is restarted.
TIOCPKTDOSTOP whenever XON/XOF flow
control is enabled after
being disabled; it is
considered ``enabled''
when the IXON flag in
the ciflag word is set,
the VSTOP member of the
ccc array is ^S and the
VSTART member of the
ccc array is ^Q.
TIOCPKTNOSTOP whenever XON/XOF 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 slave device of the
pseudo-terminal is flow controlled and not
input edited (regardless of the mode the slave
side of the pseudo-terminal). Each write to
the controller device produces a record boun-
dary for the process reading the slave 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 controller in remote mode must
SunOS 5.11 Last change: 8 Aug 1994 3
Devices pty(7D)
keep track of line boundaries, and write only
one line at a time to the controller. If, for
example, it were to buffer up several NEWLINE
characters and write them to the controller
with one write(), it would appear to a process
reading from the slave as if a single line
containing several NEWLINE characters had been
typed (as if, for example, a user had typed
the 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.
EXAMPLES
#include
#include
int fdm fds;
fdm = open("/dev/ptyp0, ORDWR); /* open master */
fds = open("/dev/ttyp0, ORDWR); /* open slave */
FILES
/dev/pty[p-z][0-9a-f] pseudo-terminal controller devices
/dev/tty[p-z][0-9a-f] pseudo-terminal slave devices
SEE ALSO
rlogin(1), rlogind(1M), ldterm(7M), termio(7I),
ttcompat(7M),
NOTES
It is apparently not possible to send an EOT by writing zero
bytes in TIOCREMOTE mode.
SunOS 5.11 Last change: 8 Aug 1994 4
|