Pseudoterminais estilo BSD vs. pseudoterminais UNIX 98

Pseudoterminais estilo BSD vs. pseudoterminais UNIX 98

Com base no que li sobre pseudoterminais no Linux, existem dois tipos de pseudoterminais:Pseudoterminais estilo BSD(que está obsoleto) ePseudoterminais UNIX 98.

Criei duas imagens que mostram minha compreensão desses dois tipos de pseudoterminais.

A imagem a seguir mostra como funcionam os pseudoterminais estilo BSD (corrija-me se a imagem estiver errada):

insira a descrição da imagem aqui

Este tipo de pseudoterminais não é difícil de entender, cada terminal está conectado a um driver mestre único.


Mas nos pseudoterminais UNIX 98, as coisas são um pouco mais confusas. A imagem a seguir mostra como acho que esse tipo de pseudoterminal funciona:

insira a descrição da imagem aqui

Basicamente, todos os terminais usam o mesmo driver mestre ( /dev/ptmx), mas não tenho certeza de como o driver mestre sabe fazer o seguinte:

  • Se os dados estão sendo enviados de um dos processos do terminal, como o driver mestre sabe para qual driver escravo TTY os dados devem ser passados?

  • Se os dados estiverem sendo enviados de um dos drivers escravos TTY, como o driver mestre sabe para qual processo de terminal os dados devem ser passados?

O driver mestre sabe como fazer isso da maneira que mostrei na imagem (ou seja, o driver mestre possui uma tabela de mapeamento que mapeia cada PID do terminal para seu driver escravo TTY correspondente)?

Responder1

Você é curiosamente fascinado por nomes. /dev/ptmxnão é um "driver", é apenas um nome no sistema de arquivos, que tem um significado especial.

Um processo abre um novo mestre chamando posix_openpt(), que retorna um descritor de arquivo; o mesmo efeito pode ser alcançado open()invocando /dev/ptmx. Cada vez que um processo open()chama /dev/ptmxumnovopseudoterminal é criado; o pseudoterminal é destruído quando não há mais processos com este descritor de arquivo aberto. Este descritor de arquivo refere-se ao lado mestre do pseudoterminal e pode ser passado para processos descendentes como qualquer outro descritor de arquivo.

Para informações mais detalhadas consulteunix.stackexchange.com/questions/117981. (Gorjeta para @JdeBP pela sugestão.)

Uma vez que um processo possui um descritor de arquivo referente a um lado mestre do pseudoterminal, ele pode descobrir o nome do lado escravo do pseudoterminal chamando ptsname(), e pode passar esse nome para qualquer processo que queira controlar através do pseudoterminal.

informação relacionada