Pseudo terminal
From Wikipedia, the free encyclopedia
In Unix, a pseudo terminal is a pseudo-device pair that provides a text terminal interface without associated virtual console, computer terminal or serial port hardware. Instead, a process replaces the role of the underlying hardware for the pseudo terminal session.
Contents |
[edit] Implementation
For each pseudo terminal, the operating system kernel provides two character devices: a master device and a slave device.
The master and slave devices, in their most common deployment, form an association between a Unix shell and a terminal emulation program or some sort of network server.
The slave device file, which generally has a nomenclature of /dev/ttyp*, has the appearance and supported system calls of any text terminal. Thus it has the understanding of a login session and session leader process (which is typically the shell program).
The master device file, which generally has a nomenclature of /dev/ptyp*, is the endpoint for communication with the terminal emulator. It receives the control requests and information from the other party over this interface and responds accordingly.
[edit] Creating Pseudo Terminals
Pseudo terminals can be created using ordinary system calls to open an available master device file, in which a file descriptor to the master file is returned to the calling process. Library functions usually also exist that open the first available master device file and initialize privileges of the corresponding slave device (e.g. openpty(3) on BSD Unix systems).
For example, if the first master device file available is /dev/ptypa, most library functions will return a descriptor for the master (/dev/ptypa) along with a descriptor for the corresponding slave (/dev/ttypa), and establish the permissions of the slave device file in some predefined fashion.
It is generally not allowed to open a pseudo terminal master device that is currently open elsewhere.
Some systems, notably System V derived systems, include a multiplexer device (usually /dev/ptmx) that will return a descriptor established to the first available master device.
[edit] Applications
Important applications of pseudo terminals include xterm and similar terminal emulators in the X Window System and other window systems (such as the Terminal application in Mac OS X), in which the terminal emulator process is associated with the master device and the shell is associated with the slave. Any terminal operations performed by the shell in a terminal emulator session are received and handled by the terminal emulator process itself (such as terminal resizing or terminal resets). The terminal emulator process receives input from the keyboard and mouse using windowing events, and is thus able to transmit these characters to the shell, giving the shell the appearance of the terminal emulator being an underlying hardware object.
Other important applications include remote login handlers such as ssh and telnet servers, which serve as the master for a corresponding shell, bridged by a pseudo terminal.
[edit] Origins
Pseudo terminals originated in 1983 with the 4.2 release of BSD. AT&T's System V included support for pseudo terminals as a driver in their STREAMS device model, along with the pseudo terminal multiplexer.