linux ptys fait référence au pseudo-terminal Linux, et le pseudo-terminal fait référence à la paire de périphériques caractères, le pseudo-terminal maître et le pseudo-terminal esclave correspond à un fichier dans le répertoire "/dev/pts ; /", et le maître est dans Identifié en mémoire comme descripteur de fichier ; le pseudo terminal est fourni par un émulateur de terminal, qui est une application fonctionnant en mode utilisateur.
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.
Qu'est-ce que Linux Ptys ?
Pseudo-terminal Linux (pty)
Les terminaux dont nous parlons souvent sont divisés en terminaux tty1-6 et pseudo-terminaux. Lorsque tty1-6 est utilisé, le système Linux est généralement directement connecté au clavier et au moniteur, ou des solutions de virtualisation telles que la console vSphere sont utilisées. Dans d'autres cas, des pseudo-terminaux sont utilisés. Cet article présentera les concepts de base des pseudo-terminaux. L'environnement utilisé dans la partie démonstration de cet article est Ubuntu 18.04.
Pseudo terminal (parfois également appelé pty) fait référence à une paire de dispositifs de caractères, pseudo terminal maître et pseudo terminal esclave. L'esclave correspond à un fichier dans le répertoire /dev/pts/, et le maître est identifié par un descripteur de fichier (fd) en mémoire. Les pseudo-terminaux sont fournis par des émulateurs de terminaux, qui sont des applications exécutées en mode utilisateur.
L'extrémité maître est l'extrémité la plus proche du moniteur et du clavier de l'utilisateur, et l'extrémité esclave est le programme CLI (Command Line Interface) exécuté sur le terminal virtuel. Le pilote de pseudo-terminal de Linux transmettra les données écrites par le côté maître (comme le clavier) au côté esclave pour la saisie du programme, et transmettra les données écrites par le programme du côté esclave au côté maître pour la lecture (pilote d'affichage , etc.). Veuillez vous référer au schéma ci-dessous (cette image provient d'Internet) :
Le programme de bureau de terminal que nous ouvrons, tel que GNOME Terminal, est en fait un logiciel de simulation de terminal. Lorsque le logiciel d'émulation de terminal s'exécute, il crée une paire pseudo-terminal maître et esclave en ouvrant le fichier /dev/ptmx et en laissant le shell s'exécuter du côté esclave. Lorsque l'utilisateur appuie sur une touche du clavier dans le logiciel de simulation de terminal, il génère un flux d'octets et l'écrit sur le maître. Le processus shell peut lire l'entrée de l'esclave et ses sous-programmes écrivent le contenu de sortie sur l'esclave. le logiciel d'émulation de terminal est responsable de l'impression des caractères dans la fenêtre.
Il existe environ trois types de scénarios d'utilisation pour les pseudo-terminaux :
Principe du pseudo-terminal
/dev/ptmx est un fichier de périphérique de caractères Lorsque le processus ouvre le fichier /dev/ptmx, le processus obtiendra simultanément un descripteur de fichier pointant vers le pseudoterminal master (ptm) et un descripteur de fichier dans le /. Répertoire dev/pts périphérique pseudoterminal esclave (pts) créé en . Chaque descripteur de fichier obtenu en ouvrant le fichier /dev/ptmx est un ptm indépendant, qui a son propre ptmx associé (on peut considérer qu'il y a un objet ptmx en mémoire) conservera le descripteur de fichier et les pts correspondants en interne. relation, les lectures et écritures sur ce descripteur de fichier seront transmises par ptmx aux pts correspondants. Nous pouvons visualiser le descripteur de fichier ouvert par ptmx via la commande lsof :
$ sudo lsof /dev/ptmx
Généralement, lorsque nous exécutons une commande via une connexion à distance, la norme L'entrée du processus, la sortie standard et la sortie d'erreur standard seront liées au pseudo-terminal. Ce qui suit est un programme de démonstration simple :
#include <stdio.h>#include <unistd.h>int main() { printf("PID : %d\n", getpid()); sleep(200); printf("\n"); return 0; }</unistd.h></stdio.h>
Enregistrez ce code dans le fichier mydemo.c, puis exécutez la commande suivante. pour compiler et exécuter Ce programme :
$ gcc -Wall mydemo.c -o demo $ ./demo
le programme de démonstration génère le PID de son propre processus. Ouvrez maintenant un autre terminal et exécutez la commande lsof :
pour voir le. les processus de 0u (entrée standard), 1u (sortie standard) et 2u (sortie d'erreur standard) sont tous liés au pseudo-terminal /dev/pts/0.
Apprentissage recommandé : "Tutoriel vidéo Linux
"Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!