qu'est-ce que Linux Ptys

藏色散人
Libérer: 2023-04-20 10:34:06
original
2581 Les gens l'ont consulté

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.

qu'est-ce que Linux Ptys

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

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.

Scénarios d'utilisation de pseudo-terminaux

Il existe environ trois types de scénarios d'utilisation pour les pseudo-terminaux :

  • Un logiciel de simulation de terminal avec des interfaces graphiques telles que xterm et gnome-terminal convertit les événements du clavier et de la souris en saisie de texte et affichage graphique de la sortie
  • Les applications shell distantes (telles que sshd) relaient l'entrée et la sortie entre un terminal distant sur le client et un pseudo-terminal sur le serveur
  • Applications multiplexeuses telles que screen et tmux. Ils relaient les entrées et les sorties d'un terminal à un autre, détachant les applications en mode texte du terminal lui-même. Pourquoi le concept de pseudo-terminal est-il proposé sous Linux ? Les programmes en ligne de commande tels que le shell ne peuvent-ils pas lire les données directement à partir du moniteur et du clavier ?
Afin d'exécuter plusieurs émulateurs de terminal sur le même écran et de réaliser une connexion à distance, nous ne pouvons vraiment pas laisser le shell traverser directement la couche pseudo-terminal. Sous la houlette de la virtualisation, idée majeure du système d'exploitation, il est nécessaire d'attribuer plusieurs terminaux virtuels à plusieurs émulateurs de terminaux et utilisateurs distants. Le côté esclave utilisé par le shell dans l'image ci-dessus est un terminal virtualisé. Le côté maître simule l’interaction côté utilisateur. On l'appelle terminal virtualisé car en plus de transmettre des flux de données, il ressemble également à un terminal.


Principe du pseudo-terminal

Le pseudo-terminal est essentiellement une paire de dispositifs de caractères créés par un émulateur de terminal fonctionnant en mode utilisateur. 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. Pour les pseudo-terminaux, le point clé est que le programme du terminal d'émulation logicielle s'exécute dans l'espace utilisateur. C'est la différence essentielle entre celui-ci et le terminal. Veuillez vous référer au schéma ci-dessous : .

quest-ce que Linux Ptys

/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
Copier après la connexion

L'IO par défaut du processus

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>
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal