Apparence
Uubu.fr

Les systèmes Linux, l’open source, les réseaux, l’interopérabilité, etc.
« Il vaut mieux viser la perfection et la manquer que viser l’imperfection et l’atteindre. » (Bertrand Arthur William RUSSEL)
03 février 2016

Linux           Types de fichiers spéciaux


pty

pty

Interfaces de pseudo-terminaux

   Un pseudoterminal (abrégé pty) est une paire de périphériques caractères virtuels qui fournissent un canal de communication bidirectionnelle. Un bout du canal est appelé le maître, l'autre est appelé 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 sur l'esclave comme si c'était écrit sur un terminal. Par exemple, écrire le caractère d'interruption (généralement ctrl-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 connecté au maître. Les pseudo-terminaux sont utilisé par des application telles que des services de login à distance (ssh, rlogin, telnet), les émulateurs de terminaux, script, screen, et expect.

   Historiquement, 2 API de pseudo-terminaux ont évolués: BSD et System V. SUSv1 a standardisé une API de pseudo-terminal basée sur l'interface System V, et cette API doit être utilisée dans tous les nouveaux programmes qui utilisent des pseudo-terminaux.

   Linux fournit à la fois des pseudo-terminaux de type BSD et de type System V (standardisés). Les terminaux de type System V sont souvent appelés pseudo-terminaux UNIX 98 sur les systèmes Linux. Depuis Linux 2.6.4, les pseudo-terminaux de type BSD sont considérés obsolètes.

Pseudoterminaux UNIX 98

   Un maître est ouvert en appelant posix_openpt(3). Cette fonction ouvre le périphérique de clonage de maître, /dev/ptmx; Une fois initialisé le périphérique, 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. La limite est ajustable de façon dynamique par le fichier /proc/sys/kernel/pty/max, et le fichier /proc/sys/kernel/pty/nr indique combien de peudoterminaux sont actuellement utilisés.

Pseudoterminaux BSD

   Les pseudo-terminaux de type BSD sont fournis par paires précréées, avec des noms sous la forme /dev/ptyXY (maître) et /dev/ttyXY (esclave), ou 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]. Un processus trouve un pseudo-terminal inutilisé en essayant d'ouvrir chaque maître de pseudo-terminal avec open(2) jusqu'à ce qu'une ouverture réussisse.

Fichiers

/dev/ptmx Périphérique de clonage de maître UNIX 98
/dev/pts/0 /dev/pts/1 /dev/pts/2 /dev/pts/3 /dev/pts/ptmx Périphériques esclaves UNIX 98
/dev/pty[p-za-e][0-9a-f] périphériques maîtres BSD
/dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3 périphériques esclaves BSD

Notes

   Une description de l'ioctl TIOCPKT qui contrôle l'opération en mode paquet, se trouve dans tty_ioctl(4).