Pseudoterminales estilo BSD versus pseudoterminales UNIX 98

Pseudoterminales estilo BSD versus pseudoterminales UNIX 98

Según lo que he leído sobre pseudoterminales en Linux, existen dos tipos de pseudoterminales:Pseudoterminales estilo BSD(que está en desuso) yPseudoterminales UNIX 98.

He creado dos imágenes que muestran mi comprensión de estos dos tipos de pseudoterminales.

La siguiente imagen muestra cómo funcionan los pseudoterminales estilo BSD (corríjame si la imagen es incorrecta):

ingrese la descripción de la imagen aquí

Este tipo de pseudoterminales no es difícil de entender, cada terminal está conectado a un controlador maestro único.


Pero en los pseudoterminales UNIX 98, las cosas son un poco más confusas. La siguiente imagen muestra cómo creo que funciona este tipo de pseudoterminales:

ingrese la descripción de la imagen aquí

Básicamente, todos los terminales usan el mismo controlador maestro ( /dev/ptmx), pero no estoy seguro de cómo el controlador maestro sabe cómo hacer lo siguiente:

  • Si se envían datos desde uno de los procesos del terminal, ¿cómo sabe el controlador maestro a qué controlador esclavo TTY se deben pasar los datos?

  • Si los datos se envían desde uno de los controladores esclavos TTY, ¿cómo sabe el controlador maestro a qué proceso de terminal se deben pasar los datos?

¿Sabe el controlador maestro cómo hacer esto de la forma que he mostrado en la imagen (es decir, el controlador maestro tiene una tabla de mapeo que asigna cada PID de terminal a su controlador esclavo TTY correspondiente)?

Respuesta1

Curiosamente te fascinan los nombres. /dev/ptmxno es un "controlador", es sólo un nombre en el sistema de archivos, que tiene un significado especial.

Un proceso abre un nuevo pty maestro llamando a posix_openpt(), que devuelve un descriptor de archivo; Se puede lograr el mismo efecto open()invocando /dev/ptmx. Cada vez que un proceso llama open()a /dev/ptmxunnuevose crea pseudoterminal; el pseudoterminal se destruye cuando no hay más procesos que tengan este descriptor de archivo abierto. Este descriptor de archivo hace referencia al lado maestro del pseudoterminal y se puede pasar a procesos descendientes como cualquier otro descriptor de archivo.

Para información más detallada verunix.stackexchange.com/questions/117981. (Un aplauso para @JdeBP por la sugerencia).

Una vez que un proceso tiene un descriptor de archivo que hace referencia a un lado maestro del pseudoterminal, puede averiguar el nombre del lado esclavo del pseudoterminal llamando ptsname()y puede pasar este nombre a cualquier proceso que desee controlar a través del pseudoterminal.

información relacionada