Definições
Este documento oferece definições de palavras e frases específicas neste espaço e será usado como referência neste conjunto de documentos.
Aplicativos de linha de comando
Aplicativos de linha de comando, ou às vezes chamados de "aplicativos de console" e/ou "clientes" do subsistema de console, são programas que operam principalmente em um fluxo de informações de texto ou caracteres. Eles normalmente não contêm elementos próprios de interface do usuário e delegam as funções de saída/exibição e entrada/interação para aplicativos de hospedagem. Os aplicativos de linha de comando recebem um fluxo de texto em seu identificador de entrada padrão STDIN
, que representa a entrada do teclado de um usuário, processam essas informações e, em seguida, respondem com um fluxo de texto em sua saída padrão STDOUT
para exibição ao monitor do usuário. Claro, esse processo evoluiu ao longo do tempo para dispositivos de entrada adicionais e cenários remotos, mas a mesma filosofia permanece: clientes de linha de comando operam em texto e outra pessoa gerencia a exibição/entrada.
Identificadores padrão
Os identificadores padrão são uma série STDIN
, STDOUT
e STDERR
e foram introduzidos como parte de um espaço de processo na inicialização. Eles representam um local para que as informações sejam aceitas no caminho e enviadas de volta na saída (incluindo um local especial para relatório de erros). Para aplicativos de linha de comando, eles a existência deles é necessária quando o aplicativo é iniciado. Eles são herdados do pai automaticamente, definidos explicitamente pelo pai ou criados automaticamente pelo sistema operacional se nenhum deles for especificado/permitido. Para aplicativos Clássicos do Windows, eles podem estar em branco na inicialização. No entanto, eles podem ser implicitamente ou explicitamente herdados do pai ou alocados, anexados e liberados durante o runtime pelo próprio aplicativo.
Os identificadores padrão não implicam um tipo específico de dispositivo conectado. No entanto, no caso de aplicativos de linha de comando, o dispositivo é mais comumente um dispositivo de console, um arquivo (de redirecionamento em um shell) ou um pipe (de um shell conectando a saída de um utilitário à entrada do próximo). Ele também pode ser um soquete ou qualquer outro tipo de dispositivo.
TTY/PTY
Em plataformas que não sejam Windows, os dispositivos TTY e PTY representam, respectivamente, um dispositivo físico verdadeiro ou um pseudodispositivo criado por software com o mesmo conceito de uma sessão de console do Windows: um canal que permite a troca de informações baseadas em texto pela comunicação entre um aplicativo cliente de linha de comando e um aplicativo de interatividade de host de servidor ou dispositivo físico de teclado/exibição.
Clientes e servidores
Dentro desse espaço, "clientes" são considerados aplicativos que fazem o trabalho de processar informações e executar comandos. Os aplicativos de "servidor" são os responsáveis pela interface do usuário e trabalham em nome dos clientes para traduzir entradas e saídas em formulários padrão.
Subsistema do console
Este é um termo abrangente que representa todos os módulos que afetam as operações de console e linha de comando. Ele se refere especificamente a um sinalizador no cabeçalho executável portátil que especifica se o aplicativo inicial é um aplicativo de linha de comando/console (e deve ter identificadores padrão para iniciar) ou um aplicativo do Windows (sem necessidade de identificadores).
O host do console, os aplicativos cliente de linha de comando, o driver do console, a superfície da API do console, a infraestrutura do pseudoconsole, os terminais, as folhas de propriedades de configuração, os mecanismos e stubs dentro do carregador de processos e utilitários relacionados ao funcionamento desses tipos de aplicativos são considerados parte integrante desse grupo.
Host do console
O Windows Console Host ou conhost.exe
, é o aplicativo de servidor para todas as APIs do Console do Windows, assim como a interface de usuário clássica do Windows para o trabalho com aplicativos de linha de comando. O conteúdo completo desse binário, tanto o servidor de API quanto a interface do usuário, historicamente pertencia ao Windows csrss.exe
, um processo crítico do sistema, mas foi divergido por questões de segurança e isolamento. No futuro, conhost.exe
continuará responsável pelo serviço e tradução de chamadas de API, mas os componentes da interface do usuário devem ser delegados por um pseudoconsole a um terminal.
Pseudoconsole
Esta é a simulação do Windows de um pseudoterminal ou "PTY" de outras plataformas. Ele tenta seguir a filosofia geral de interface dos PTYs, fornecendo um canal bidirecional simples de comunicação baseada em texto, mas a complementa no Windows com uma grande camada de compatibilidade que busca traduzir a amplitude dos aplicativos do Windows escritos antes dessa mudança de filosofia de design da superfície clássica da API do console para a forma de comunicação de canal de texto simples. Os terminais podem usar o pseudoconsole para se apropriar dos elementos da interface do usuário fora do host do console, conhost.exe
, deixando-o responsável pelos esforços de manutenção, tradução e compatibilidade da API.
Terminal
Um terminal é a interface do usuário e o módulo de interação para um aplicativo de linha de comando. Hoje, ele é uma representação de software daquilo que costumava ser um dispositivo físico com um monitor de exibição, um teclado e um canal de comunicação serial bidirecional. Ele é responsável por coletar a entrada do usuário em várias formas, traduzi-la e codificá-la, bem como qualquer informação de comando especial, em um único fluxo de texto e enviá-la ao PTY para transmissão no canal STDIN
do aplicativo cliente de linha de comando. Ele também é responsável por receber as informações retornadas, por meio do PTY, que vieram do canal STDOUT
de um aplicativo cliente, decodificar as informações especiais no payload, dispor texto e comandos adicionais e apresentá-los graficamente para o usuário final.