pty" -- Device Driver" "

Device driver for pseudoterminals

The COHERENT device driver pty lets your system support up to 128 pairs of pseudoterminals, or ptys.

A pseudoterminal is a means of letting a process masquerade as a terminal. For example, when you run the program xterm under X, that program passes what you type into COHERENT through a pseudoterminal device.

Each pseudoterminal consists of a pair of devices: a master device and a slave device. The program that is accepting input from a human at a keyboard (e.g., xterm) is ``plugged'' into the slave device; the program that is accepting and processing the input (e.g., a shell) is plugged into the master device. The following diagram shows how this pair of devices relate to each other:

As you can see, the slave device talks to the keyboard through a sub-module that performs line discipline. Line-discipline handles backspace characters, handles special interrupt characters (such as &&lltt;;ccttrrll-- CC&&ggtt;;), and converts line-feed characters into carriage- return--line-feed character pairs: it bundles what you type into a package that can be passed to the master application and processed.

Only one process at a time can open a master device; the device is opened as soon as requested. Several processes can open a slave device, but blocks until the matching master device has been open. When blocked in this way, the slave is said to be ``waiting for pseudocarrier.''

An attempt to read a master device when no input is available, or to write to a master device when the slave cannot accept data, will block unless nonblocking I/O has been specifically requested; in this case, the system calls read() or write() fail and errno is set to EAGAIN.

You can use the system call ioctl() on slave devices with all valid line-discipline commands, including TCGETA, TCSETA, TCSETAW, TCSETAF, and TCFLSH. There are no valid ioctl() commands for master devices.

The system call poll() is allowed with both master and slave pty devices. However, priority polls (PPOOLLLLPPRRII) are not supported.

Master devices are named /dev/pty[p-w][0-f]. Corresponding slaves are /dev/tty[p-w][0-f]. Like any other device, each pty has a major and minor number. The major number is 9 (PPTTYY__MMAAJJOORR in system header file <sys/devices.h>). For slave devices, minor numbers are assigned according to the following scheme:

               _d_e_v_i_c_e   _M_a_j_o_r _n_u_m_b_e_r   _M_i_n_o_r _n_u_m_b_e_r
               /dev/ttyp0     9              0
               /dev/ttyp1     9              1
               ...
               /dev/ttyp9     9              9
               /dev/ttypa     9             10
               /dev/ttypb     9             11
               ...
               /dev/ttypf     9             15
               /dev/ttyq0     9             16
               ...
               /dev/ttyw0     9             112
               ...
               /dev/ttywf     9             127

For master devices, use pty instead of tty in the device name, and add 128 to the minor number.

The configurable parameter NUPTY_SPEC sets the number of pty pairs that may be used. The default is eight. If you want to change this value, invoke the script /etc/conf/pty/mkdev and enter the new value at the appropriate prompt. Then use the command /etc/conf/bin/idmkcoh to build a new kernel that incorporates this change; when the new kernel is built, boot it. For details, see the Lexicon entry for the command idmkcoh.

Specifying a value of zero for NUPTY_SPEC will cause the pty device to be omitted from the next kernel that idmkcoh generates.

See Also