O dispositivo mestre aparece como um terminal padrão para o programa do driver?

1

Da interface de programação do Linux

The key point about a pseudoterminal is that the slave device appears just like a standard terminal. All of the operations that can be applied to a terminal device can also be applied to a pseudoterminal slave device. Some of these operations aren’t meaningful for a pseudoterminal (e.g., setting the terminal line speed or parity), but that’s okay, because the pseudoterminal slave silently ignores them.

O dispositivo escravo aparece como um terminal padrão para o programa orientado a terminal. Além disso, como um terminal de controle para o processo do programa terminal-orineted.

O dispositivo mestre é exibido como um terminal padrão para o programa do driver? Se sim, como um terminal de controle? Se não, algo como um arquivo de dispositivo ou arquivo regular, mas não necessariamente um arquivo de dispositivo do terminal?

Obrigado.

    
por Tim 26.05.2018 / 00:37

2 respostas

1

O dispositivo mestre parece um arquivo de dispositivo de terminal, completo com uma disciplina de linha que pode ser acessada por meio de tcgetattr() / tcsetattr() / & c. e um resultado de sucesso de isatty() . Na verdade, é a mesma instância de disciplina de linha que o dispositivo escravo, e é assim que o programa no lado mestre transmite coisas como alterações no tamanho da janela para os programas no lado do escravo. É também como o programa do lado mestre sinaliza (uma emulação) o desligamento do modem, definindo a velocidade da linha para zero e, assim, acionando o mecanismo de desligamento da disciplina de linha. (O que o texto diz sobre a velocidade da linha é, portanto, incorreto. Há um caso em que a velocidade da linha é significativa.)

A diferença está na E / S de leitura / gravação. O que é lido é a sequência de caracteres que, para um terminal real, seria enviada por um dispositivo serial subjacente real. O que está escrito é a sequência de caracteres que, para um terminal real, é recebida pelo dispositivo serial subjacente real. Em outras palavras: é o outro lado do processamento de entrada e saída canônico / não canônico pela disciplina de linha.

Existem complexidades para isso, ou seja, modo de pacote e modo remoto . Este último já caiu em desuso desde então e não existia na maioria dos sistemas operacionais, mesmo no início deste século, necessitando de remendos para as antigas ferramentas de Daniel J. Bernstein. O primeiro não é particularmente útil para a maioria das tarefas e, portanto, não vou abordá-lo detalhadamente nesta resposta.

O dispositivo mestre geralmente não é o terminal de controle para as sessões nas quais os processos do lado mestre são executados. Isso seria conceitualmente colocar coisas que são análogas aos internos de um terminal real no lugar errado. O terminal de controle para tais sessões é, se estiver lá, um terminal outro .

Este será o caso de programas como script , :terminal , emacs e ptybandage do NeoVIM (se não forem parte de um pipeline), que renderizam diretamente para outro dispositivo terminal e são executados em uma sessão interativa. controlado por esse dispositivo terminal.

Não é o caso de um servidor SSH, emuladores de terminal GUI, console-terminal-emulator do conjunto de ferramentas, ptyrun (em uso normal) ou emuladores de terminal de framebuffer monolítico, como zhcon. Eles são renderizados para todos os tipos de diferentes dispositivos de E / S, desde buffers e FIFOs no sistema de arquivos no caso de console-terminal-emulator através de soquetes TCP para framebuffer e dispositivos de classe HID, nenhum dos quais são terminais. Além disso, console-terminal-emulator , servidores SSH e emuladores de terminal framebuffer são geralmente invocados em contextos de onde, naturalmente, não há terminal de controle para a sessão começar.

Observe que o diagrama não é definitivo. Não é necessariamente o caso que o processo do lado mestre forks os processos do lado do escravo. Em terminais virtuais de espaço de usuário nosets-toolset, por exemplo, os processos do lado do escravo são ttylogin@* serviços comuns, bifurcados pelo gerenciador de serviços, e não há relação de processo direta entre o processo do emulador no lado mestre e a sessão de login processos no lado do escravo. Mas isso está indo além do escopo desta resposta.

Leitura adicional

por 26.05.2018 / 13:14
1

O dispositivo mestre parece mais com um tubo. Você pode ler e escrever seu descritor de arquivo como um pipe, em tamanhos convenientes para você. Você receberá leituras curtas, portanto sempre verifique o que read (2) retorna.

    
por 26.05.2018 / 11:35

Tags