pseudoterminales ao estilo BSD vs. pseudoterminales UNIX 98

4

Com base no que li sobre pseudoterminais no Linux, existem dois tipos de pseudo-terminais: pseudoterminais estilo BSD (que é obsoleto) e pseudoterminais UNIX 98 .

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

A imagem a seguir mostra como funciona o pseudotermininal estilo BSD (por favor me corrija se a imagem estiver errada):

Estetipodepseudoterminaisnãoédifícildeentender,cadaterminaléconectadoaumúnicodrivermestre.

MasnospseudoterminaisdoUNIX98,ascoisassãoumpoucomaisconfusas.Aimagemaseguirmostracomoeuachoqueessetipodepseudooterminalfunciona:

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

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

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

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

    
por user7681202 21.11.2017 / 12:00

1 resposta

5

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

Um processo abre uma nova master pty chamando posix_openpt() , que retorna um descritor de arquivo; o mesmo efeito pode ser alcançado chamando open() on /dev/ptmx . Cada vez que um processo chama open() de /dev/ptmx a novo pseudoterminal é 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 obter informações mais detalhadas, consulte unix.stackexchange.com/questions/117981 . (Dica do Hat para @JdeBP para a sugestão.)

Quando um processo tiver um descritor de arquivo referente a um lado mestre do pseudoterminal, ele poderá descobrir o nome do lado escravo do pseudoterminal chamando ptsname() e poderá passar esse nome para qualquer processo que desejar controlar através do pseudoterminal.

    
por 21.11.2017 / 12:23