Definiciones
Este documento proporciona las definiciones de palabras y frases específicas en este espacio y se usa como referencia en este conjunto de documentos.
Las aplicaciones de línea de comandos, o a veces denominadas "aplicaciones de consola" o "clientes" del subsistema de consola, son programas que funcionan principalmente en una secuencia de información de texto o caracteres. Por lo general, no contienen elementos de interfaz de usuario propios y delegan los roles de salida/visualización y entrada/interacción en una aplicación de hospedaje. Las aplicaciones de línea de comandos reciben una secuencia de texto en su identificador de entrada STDIN
estándar que representa la entrada del teclado de un usuario, procesan esa información y, a continuación, responden con una secuencia de texto en su salida STDOUT
estándar para volver a mostrarse en el monitor del usuario. Por supuesto, esto ha evolucionado con el tiempo para dispositivos de entrada adicionales y escenarios remotos, pero la filosofía básica sigue siendo la misma: los clientes de línea de comandos operan en texto y otra persona administra la visualización y la entrada.
Los identificadores estándar son una serie, STDIN
, STDOUT
y STDERR
, introducidos como parte de un espacio de proceso en el inicio. Representan un lugar para que la información se acepte en la entrada y se envíe de vuelta a la salida (incluido un lugar especial para informar de los errores en la salida). En el caso de las aplicaciones de línea de comandos, siempre deben existir cuando se inicia la aplicación. Se heredan del elemento primario automáticamente, las establece explícitamente el elemento primario o las crea automáticamente el sistema operativo si no se especifican o permiten. En el caso de las aplicaciones clásicas de Windows, estas pueden estar en blanco en el inicio. Sin embargo, se pueden heredar implícita o explícitamente del elemento primario, o bien la propia aplicación puede asignarlas, asociarlas y liberarlas durante el tiempo de ejecución.
Los identificadores estándar no implican un tipo específico de dispositivo asociado. Sin embargo, en el caso de las aplicaciones de línea de comandos, el dispositivo suele ser un dispositivo de consola, un archivo (de redireccionamiento en un shell) o una canalización (desde un shell que conecta la salida de una utilidad a la entrada de la siguiente). También puede ser un socket o cualquier otro tipo de dispositivo.
En plataformas que no son Windows, los dispositivos TTY y PTY representan respectivamente un verdadero dispositivo físico o un pseudodispositivo creado por software, que son el mismo concepto que una sesión de consola de Windows: un canal donde la comunicación entre una aplicación cliente de línea de comandos y una aplicación de interactividad del host de servidor o un dispositivo físico de teclado/visualización pueden intercambiar información basada en texto.
En este espacio, nos referimos a "clientes" como aplicaciones que realizan el trabajo de procesar información y ejecutar comandos. Las aplicaciones de "servidor" son las responsables de la interfaz de usuario y trabajan para traducir la entrada y salida en formularios estándar en nombre de los clientes.
Se trata de un término general que representa todos los módulos que afectan a las operaciones de la consola y de la línea de comandos. Hace referencia específicamente a una marca que forma parte del encabezado “Portable Executable” que especifica si la aplicación inicial es una aplicación de línea de comandos o consola (y debe tener identificadores estándar para iniciarse) o una aplicación Windows (y no los necesita).
El host de consola, las aplicaciones cliente de línea de comandos, el driver de consola, la superficie de API de consola, la infraestructura de pseudoconsola, los terminales, las hojas de propiedades de configuración, los mecanismos y stubs del cargador de procesos y las utilidades relacionadas con los trabajos de estas formas de aplicaciones se consideran parte de este grupo.
El host de consola de Windows, o conhost.exe
, es la aplicación de servidor para todas las API de consola de Windows, así como la interfaz de usuario clásica de Windows para trabajar con aplicaciones de línea de comandos. El contenido completo de este binario, tanto el servidor API como la interfaz de usuario, históricamente perteneció a Windows csrss.exe
, un proceso crítico del sistema, y se separó por motivos de seguridad y aislamiento. En el futuro, conhost.exe
seguirá siendo responsable del servicio y la traducción de llamadas API, pero los componentes de la interfaz de usuario están diseñados para delegarse a través de una pseudoconsola en un terminal.
Esta es la simulación de Windows de un pseudoterminal o "PTY" de otras plataformas. Intenta coincidir con la filosofía de interfaz general de PTY, proporcionando un canal bidireccional simple de comunicación basada en texto, pero lo complementa en Windows con una capa de compatibilidad amplia para traducir la gran variedad de aplicaciones de Windows escritas antes de este cambio de filosofía de diseño de la superficie de API de consola clásica en el formulario de comunicación de canal de texto simple. Los terminales pueden usar la pseudoconsola para tomar posesión de los elementos de la interfaz de usuario fuera del host de la consola, conhost.exe
, y dejarla a cargo del servicio de API, la traducción y los esfuerzos de compatibilidad.
Un terminal es la interfaz de usuario y el módulo de interacción de una aplicación de línea de comandos. En la actualidad, es una representación de software de lo que solía ser históricamente un dispositivo físico con un monitor de pantalla, un teclado y un canal de comunicación serie bidireccional. Es responsable de recopilar la entrada del usuario en una gran variedad de formas, traducirla y codificarla, así como cualquier información de comando especial, en una sola secuencia de texto y enviarla al PTY para su transmisión al canal STDIN
de la aplicación cliente de la línea de comandos. También es responsable de recibir información de devolución, a través del PTY, que procede del canal STDOUT
de una aplicación cliente, descodificar cualquier información especial en la carga, diseñar todo el texto y comandos adicionales, y presentarlos gráficamente al usuario final.