pty Arquivo Especial

Propósito

Fornece o driver de dispositivo pseudo-terminal (pty).

Descrição

O driver de dispositivo pty fornece suporte para um pseudo-terminal. Um pseudo-terminal inclui um par de dispositivos de caracteres controller e worker .
Nota: Os dispositivos de controlador e de trabalhador são convencionalmente conhecidos como dispositivos de master e servidor. Esses termos são usados de forma intercambiável para usar linguagem mais inclusiva.
O dispositivo operário fornece processos com essencialmente a mesma interface que o fornecido pelo driver de dispositivo tty . No entanto, em vez de fornecer suporte para um dispositivo de hardware, o dispositivo do trabalhador é manipulado por outro processo através da metade de controle do pseudo-terminal. Ou seja, qualquer coisa escrita no dispositivo de controle é dada ao dispositivo do trabalhador como entrada e qualquer coisa escrita no dispositivo do trabalhador é apresentada como entrada no dispositivo de controle.

No ' AIX Versão 4, o subsistema pty usa convenções de nomenclatura semelhantes às do ' UNIX do Sistema V. Há um nó para o driver de controle, ' /dev/ptc, e um número máximo de nós ' N para os drivers de trabalho, ' /dev/pts/ 'n. N é configurável em configuração pty e pode ser alterada dinamicamente por reconfiguração de pty, sem fechar os dispositivos abertos.

O dispositivo de controle é configurado como um dispositivo clone cujo número de dispositivo principal é o número maior do dispositivo clone e cujo número de dispositivo menor é o número maior do driver de controle. Não há nenhum nó no sistema de filesystem para dispositivos de controle. Um dispositivo de controle pode ser aberto apenas uma vez, mas os dispositivos do trabalhador podem ser abertos várias vezes.

Ao abrir o dispositivo de controle com o arquivo especial /dev/ptc , um aplicativo pode abrir rapidamente o controle e os lados do trabalhador de um pseudo-terminal não utilizado. O nome do lado do trabalhador correspondente pode ser recuperado usando o subroutine ttyname , que sempre retorna o nome do lado do trabalhador.

Com os subsistemas Berkeley pty, os comandos têm que procurar um pseudo-terminal não utilizado, abrindo cada lado controle sequencialmente. O lado do controle não poderia ser aberto se já estivesse em uso. Assim, o abrir falharia, configurando a variável errno para EIO, até que um pseudo-terminal não utilizado foi encontrado. É possível configurar o subsistema pty a fim de usar arquivos especiais com a convenção de nomenclatura pty BSD:

Item Descrição
Dispositivos de controlo /dev/pty[p-zA-Z][0-f]
dispositivos do trabalhador /dev/tty[p-zA-Z][0-f]

Esses arquivos especiais não são links simbólicos para os arquivos especiais do sistema operacional. Eles são completamente separados. O número de dispositivos de controle e de pares de trabalhadores usando a convenção de nomenclatura BSD é configurável.

Os seguintes comandos ioctl aplicam-se a pseudo-terminais:

Item Descrição
TIOCSTOP Pára a saída para um terminal. Isso é o mesmo que usar a sequência de chaves Ctrl-S. Nenhum parâmetro é permitido para este comando.
TIOCSTART Reinicia a saída que foi interrompida por um comando TIOCSTOP ou pela sequência de chaves Ctrl-S. Isso é o mesmo que digitar a sequência de chaves Ctrl-Q. Nenhum parâmetro é permitido para este comando.
TIOCPKT Ativa e desabilita o modo de pacote. O modo de pacote é ativado especificando (por referência) um parâmetro não zero. Ele é desativado especificando (por referência) um parâmetro zero. Quando aplicados ao lado de controle de um pseudo-terminal, cada leitura subsequente do terminal devolve dados gravados na parte do trabalhador do pseudo terminal. Os dados são precedidos quer por um byte zero (simbolicamente definido como TIOCPKT_DATA) ou por um único byte que reflete informações de status de controle. Neste último caso, o byte é um OR inclusivo ou igual a zero ou mais dos bits a seguir:
TIOCPKT_FLUSHREAD
A fila de leitura para o terminal é flustada.
TIOCPKT_FLUSHWRITE
A fila de gravação para o terminal é flustada.
TIOCPKT_STOP
A saída para o terminal é interrompida com o Ctrl-S.
TIOCPKT_START
A saída para o terminal é reiniciada.
TIOCPKT_DOSTOP
O caractere de parada definido pela disciplina de linha de tty atual é o Ctrl-S; o caractere de início definido pela disciplina de linha é o Ctrl-Q.
TIOCPKT_NOSTOP
Os caracteres start e stop não são Ctrl-S e Ctrl-Q.

Enquanto este modo está em uso, a presença de informações de status de controle a serem lidas a partir do lado de controle pode ser detectada por um select para condições excepcionais.

Este modo é usado pelos comandos rlogin e rlogind para fazer login em um host remoto e implementar o ecoing remoto e o controle de fluxo local de Ctrl-S e Ctrl-Q com flushing de saída adequado.

TIOCUCNTL Ativa e desabilita um modo que permite que um pequeno número de comandos simples do usuário ioctl seja passado através do pseudo-terminal, usando um protocolo similar ao do modo TIOCPKT . Os modos TIOCUCNTL e TIOCPKT são mutuamente exclusivos.

Este modo é ativado a partir do lado de controle de um pseudo-terminal especificando (por referência) um parâmetro não zero. Ele é desativado especificando (por referência) um parâmetro zero. Cada leitura subsequente do lado de controle retornará dados escritos sobre a parte do trabalhador do pseudo-terminal, precedida por um byte zero ou por um único byte que reflete uma operação de controle do usuário no lado do trabalhador.

Um comando de controle do usuário consiste em uma operação ioctl especial sem dados. Esse comando é emitido como UIOCCMD (Value), onde o parâmetro Value especifica um número na faixa de 1 até 255. O valor da operação é recebido como um único byte na próxima leitura a partir do lado controle.

Um valor de 0 pode ser usado com a operação ioctl UIOCCMD para sondar para a existência dessa instalação. O zero não é disponibilado para leitura pelo lado do controle. As operações de comando podem ser detectadas com um select para condições excepcionais.

TIOCREMOTO Um modo para o controle metade de um pseudo-terminal, independente de TIOCPKT. Este modo implementa controle de fluxo, em vez de edição de entrada, para entrada para o pseudo-terminal, independentemente do modo terminal. Cada gravação para o terminal de controle produz um limite de registro para o processo lendo o terminal. No uso normal, uma gravação de dados é como os dados digitados como uma linha no terminal, enquanto que uma gravação de zero bytes é como digitar um caractere de fim de arquivo. Este modo é usado para edição de linha remota em um gerenciador de janela e entrada controlada por fluxo.