Compartir a través de


Identificadores de consola

Un proceso de consola usa identificadores para acceder a los búferes de entrada y pantalla de su consola. Un proceso puede usar la función GetStdHandle, CreateFile o CreateConsoleScreenBuffer para abrir uno de estos identificadores.

La función GetStdHandle proporciona un mecanismo para recuperar la entrada estándar (), la salida estándar (STDINSTDOUT) y los identificadores de error estándar (STDERR) asociados a un proceso. Durante la creación de la consola, el sistema crea estos identificadores. Inicialmente, STDIN es un identificador del búfer de entrada de la consola y STDERRSTDOUT son identificadores del búfer de pantalla activo de la consola. Sin embargo, la función SetStdHandle puede redirigir los identificadores estándar cambiando el identificador asociado a STDIN, STDOUTo STDERR. Dado que cualquier proceso secundario hereda los identificadores estándar del elemento primario, las llamadas posteriores a GetStdHandle devuelven el identificador redirigido. Un identificador devuelto por GetStdHandle puede, por lo tanto, hacer referencia a algo distinto de la E/S de la consola. Por ejemplo, antes de crear un proceso secundario, un proceso primario puede usar SetStdHandle para establecer un identificador de canalización para que sea el STDIN identificador heredado por el proceso secundario. Cuando el proceso secundario llama a GetStdHandle, obtiene el identificador de canalización. Esto significa que el proceso primario puede controlar los identificadores estándar del proceso secundario. Los identificadores devueltos por GetStdHandle tienen GENERIC_READ | GENERIC_WRITE acceso a menos que Se haya usado SetStdHandle para establecer el identificador estándar para tener un acceso menor.

El valor de los identificadores devueltos por GetStdHandle no es 0, 1 y 2, por lo que las constantes de secuencia predefinidas estándar en Stdio.h (STDIN, STDOUTy STDERR) no se pueden usar en funciones que requieren un identificador de consola.

La función CreateFile permite a un proceso obtener un identificador del búfer de entrada de su consola y búfer de pantalla activo, incluso si STDIN y STDOUT se han redirigido. Para abrir un identificador en el búfer de entrada de una consola, especifique el CONIN$ valor en una llamada a CreateFile. Especifique el CONOUT$ valor de una llamada a CreateFile para abrir un identificador en el búfer de pantalla activo de una consola. CreateFile permite especificar el acceso de lectura y escritura del identificador que devuelve.

La función CreateConsoleScreenBuffer crea un nuevo búfer de pantalla y devuelve un identificador. Este identificador se puede usar en cualquier función que acepte un identificador para la salida de la consola. El nuevo búfer de pantalla no está activo (mostrado) hasta que se especifica su identificador en una llamada a la función SetConsoleActiveScreenBuffer . Tenga en cuenta que cambiar el búfer de pantalla activo no afecta al identificador devuelto por GetStdHandle. Del mismo modo, el uso de SetStdHandle para cambiar el STDOUT identificador no afecta al búfer de pantalla activo.

Los identificadores de consola devueltos por CreateFile y CreateConsoleScreenBuffer se pueden usar en cualquiera de las funciones de consola que requieren un identificador para el búfer de entrada de una consola o de un búfer de pantalla de consola. Las funciones de consola pueden usar los identificadores devueltos por GetStdHandle si no se han redirigido para hacer referencia a algo distinto de la E/S de la consola. Sin embargo, si se ha redirigido un identificador estándar para hacer referencia a un archivo o una canalización, las funciones ReadFile y WriteFile solo pueden usar el identificador. GetFileType puede ayudar a determinar a qué tipo de dispositivo se refiere el identificador. Un identificador de consola se presenta como FILE_TYPE_CHAR.

Un proceso puede usar la función DuplicateHandle para crear un identificador de consola duplicado que tenga acceso o heredabilidad diferentes del identificador original. Tenga en cuenta, sin embargo, que un proceso puede crear un identificador de consola duplicado solo para su propio uso. Esto difiere de otros tipos de identificadores (como archivos, canalizaciones o objetos de exclusión mutua), para los que DuplicateHandle puede crear un duplicado válido para un proceso diferente. El otro proceso debe compartir el acceso a una consola durante la creación del otro proceso o puede solicitarlo el otro proceso mediante el mecanismo AttachConsole .

Para cerrar un identificador de consola, un proceso puede usar la función CloseHandle .