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 baudrate and other baud rates specified in the c_cflag word of
the termios structure, and the CLOCAL flag in that word. It does not support any of the other termio(7I) device controlfunctions specified by flags in the c_cflag word of the ter-
mios structure and by the IGNBRK, IGNPAR, PARMRK, orINPCK flags in the c_iflag 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 functionsare 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 ithad 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 slavedevice. None of the bits in the c_cflag 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 hasthe 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 c_iflag word that control the pro-
cessing of parity errors have any effect. Similarly, thereis 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 IXOFF flagin the c_iflag word is not supported.
The delays specified in the c_oflag 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 devicesof pseudo-terminals to provide the functionality needed by
applications programs to emulate real hardware interfaces: TIOCSTOP The argument is ignored. Output to thepseudo-terminal is suspended, as if a STOP
character had been typed. TIOCSTART The argument is ignored. Output to thepseudo-terminal is restarted, as if a START
character had been typed. TIOCPKT The argument is a pointer to an int. If thevalue 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 asTIOCPKT_DATA), or a single byte reflecting
control status information. In the lattercase, the byte is an inclusive-or of zero or
more of the bits:TIOCPKT_FLUSHREAD whenever the read queue
for the terminal isSunOS 5.11 Last change: 8 Aug 1994 2
Devices pty(7D)
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 inthe c_iflag word is set,
the VSTOP member of thec_cc array is ^S and the
VSTART member of thec_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 thevalue 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 packetmode. When a pseudo-terminal is in remote
mode, input to the slave device of thepseudo-terminal is flow controlled and not
input edited (regardless of the mode the slaveside 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 apseudo-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, O_RDWR); /* open master */
fds = open("/dev/ttyp0, O_RDWR); /* 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