NOM
pty - Interfaces de pseudo-terminaux
Un pseudo-terminal est une paire de périphériques en mode caractère
virtuels qui fournissent un canal de communication bidirectionnelle. Un
bout du canal est appelé le maître ; l’autre bout se nomme l'esclave.
Le bout esclave du pseudo-terminal fournit une interface qui se
comporte exactement comme un terminal classique. Un processus qui
s’attend à être connecté à un terminal peut ouvrir le bout esclave d’un
pseudo-terminal, puis être piloté par un programme qui a ouvert le bout
maître. Tout ce qui est écrit sur le maître est fourni au processus via
l’esclave, comme si cela était écrit sur un terminal. Exemple : écrire
le caractère d’interruption (en général control-C) sur le périphérique
maître cause l’envoi d’un signal d’interruption (SIGINT) au groupe de
processus qui est connecté à l’esclave. Réciproquement, tout ce qui est
écrit sur l’esclave peut être lu par le processus qui est connecté au
périphérique maître. Les pseudo-terminaux sont utilisés par des
applications telles que des services de login à distance (ssh(1),
rlogin(1), telnet(1)), les émulateurs de terminaux, script(1),
screen(1) et expect(1).
Historiquement, deux API de pseudo-terminaux (BSD, System V) ont évolué
au sein du monde Unix. La norme SUSv1 a standardisé une API de
pseudo-terminal basée sur celle de System V, et c'est cette API qui
devrait être utilisée dans tous les nouveaux programmes utilisant des
pseudo-terminaux.
Linux fournit à la fois des pseudo-terminaux de type System V
(standardisés) et BSD. Les terminaux de type System V sont communément
appelés pseudo-terminaux Unix 98 sur les systèmes Linux. Depuis le
noyau 2.6.4, les pseudo-terminaux de type BSD sont considérés obsolètes
(il peuvent être désactivés lors de la configuration du noyau) ; les
pseudo-terminaux Unix 98 devraient être utilisés dans les nouvelles
applications.
Pseudo-terminaux Unix 98
Un pseudo-terminal maître Unix 98 est ouvert en appelant
posix_openpt(3) : cette fonction ouvre le périphérique de clonage de
maître, /dev/ptmx (voir pts(4)). Après que le programme a réalisé ses
initialisations éventuelles, changé le propriétaire et les permissions
du périphérique esclave avec grantpt(3), et déverrouillé l’esclave avec
unlockpt(3), le périphérique esclave correspondant peut être ouvert en
passant le nom renvoyé par ptsname(3) dans un appel à open(2).
Le noyau Linux impose une limite au nombre de pseudo-terminaux Unix 98
disponibles. Dans les versions du noyau précédant la version 2.6.3
(incluse), cette limite est configurée lors de la compilation du noyau
(CONFIG_UNIX98_PTYS) : le nombre de pseudo-terminaux autorisé peut
aller jusqu’à 2048, avec une valeur par défaut de 256. Depuis le noyau
2.6.4, la limite est ajustable de façon dynamique via
/proc/sys/kernel/pty/max ; un autre fichier, /proc/sys/kernel/pty/nr,
indique le nombre de pseudo-terminaux actuellement utilisés. Pour plus
de détails sur ces deux fichiers, voir proc(5).
Pseudo-terminaux BSD
Les pseudo-terminaux de type BSD sont fournis en tant que paires
pré-créées, avec des noms de la forme /dev/ptyXY (maître) et /dev/ttyXY
(esclave), où X est une lettre de l’ensemble de 16 caractères [p-za-e]
et Y est une lettre de l’ensemble de 16 caractères [0-9a-f]
(les lettres de ces ensembles peuvent varier entre les différentes
versions d’Unix). Exemple : /dev/ptyp1 et /dev/ttyp1 constituent une
paire de pseudo-terminaux BSD. Un processus trouve une paire inutilisée
de pseudo-terminaux en essayant d’ouvrir chaque maître avec open(2)
jusqu’à ce qu’une ouverture réussisse ; le pseudo-terminal esclave
associé (remplacer « pty » par « tty » dans le nom du maître) peut
ensuite être ouvert.
FICHIERS
/dev/ptmx (périphérique de clonage de maître Unix 98)
/dev/pts/* (périphériques esclaves Unix 98)
/dev/pty[p-za-e][0-9a-f] (périphériques maîtres BSD)
/dev/tty[p-za-e][0-9a-f] (périphériques esclaves BSD)
NOTES
Une description de l’ioctl(2) TIOCPKT, qui contrôle l’opération en mode
paquet, se trouve dans tty_ioctl(4).
Les opérations ioctl(2) BSD TIOCSTOP, TIOCSTART, TIOCUCNTL et
TIOCREMOTE ne sont pas implémentées sous Linux.
VOIR AUSSI
select(2), setsid(2), forkpty(3), openpty(3), termios(3), pts(4),
tty(4), tty_ioctl(4)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Page modifiée le 23 novembre 2010 par S. Lopin, pour le site
www.man-linux-magique.net
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».