p Pseudo terminal pairs are allocated on as-needed basis, maximum number of them is controlled via .Em kern.maxptys sysctl (defaults to 992).
p The following .Xr ioctl 2 calls apply only to pseudo terminals: l -tag -width TIOCREMOTE t Dv TIOCEXT Enable/disable .Dq "external processing" . This affects delivery of .Dv TIOCPKT_IOCTL packets. External processing is enabled by specifying (by reference) a nonzero .Vt int parameter and disabled by specifying (by reference) a zero .Vt int parameter.
p .Dv TIOCEXT is reset to its default (disabled) when the slave closes the .Nm . t Dv TIOCSTOP Stops output to a terminal (e.g. like typing .Ql ^S ) . Takes no parameter. t Dv TIOCSTART Restarts output (stopped by .Dv TIOCSTOP or by typing .Ql ^S ) . Takes no parameter. t Dv TIOCPKT Enable/disable .Em packet mode. Packet mode is enabled by specifying (by reference) a nonzero .Vt int parameter and disabled by specifying (by reference) a zero .Vt int 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: l -tag -width TIOCPKT_FLUSHWRITE t Dv TIOCPKT_FLUSHREAD whenever the read queue for the terminal is flushed. t Dv TIOCPKT_FLUSHWRITE whenever the write queue for the terminal is flushed. t Dv TIOCPKT_STOP whenever output to the terminal is stopped a la .Ql ^S . t Dv TIOCPKT_START whenever output to the terminal is restarted. t Dv TIOCPKT_DOSTOP whenever .Em t_stopc is .Ql ^S and .Em t_startc is .Ql ^Q . t Dv TIOCPKT_NOSTOP whenever the start and stop characters are not .Ql ^S/^Q .
p 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.
p 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. t 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 the new .Xr termios 4 structure. The master side of the .Nm can also use .Xr tcgetattr 3 to read the new .Xr termios 4 structure.
p The master will not read packets with the bit .Dv TIOCPKT_IOCTL set until it has activated .Dq "external processing" using .Dv TIOCEXT .
p 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 t 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 .Vt int parameter and disabled by specifying (by reference) a zero .Vt int 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. t 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 l -tag -width /dev/tty[p-zP-T][0-9a-zA-Z]x -compact t Pa /dev/pty[p-zP-T][0-9a-zA-Z] master pseudo terminals t Pa /dev/tty[p-zP-T][0-9a-zA-Z] slave pseudo terminals .El .Sh DIAGNOSTICS None. .Sh SEE ALSO .Xr ioctl 2 , .Xr read 2 , .Xr select 2 , .Xr write 2 , .Xr openpty 3 , .Xr tty 4 .Sh HISTORY The .Nm driver appeared in x 4.2 .