Compartir a través de


Funciones de entrada y salida de la consola de alto nivel

Las funciones ReadFile y WriteFile, o las funciones ReadConsole y WriteConsole, permiten a una aplicación leer la entrada de la consola y escribir la salida de la consola como una secuencia de caracteres. ReadConsole y WriteConsole se comportan exactamente igual que ReadFile y WriteFile, a excepción de que se pueden utilizar como funciones de caracteres anchos (donde los argumentos de texto deben usar Unicode) o como funciones ANSI (donde los argumentos de texto deben usar caracteres del conjunto de caracteres de Windows). Las aplicaciones que necesitan mantener un único conjunto de orígenes para admitir el conjunto de caracteres Unicode o ANSI deben utilizar ReadConsole y WriteConsole.

ReadConsole y WriteConsole solo se pueden utilizar con identificadores de consola. ReadFile y WriteFile se pueden utilizar con otros identificadores (como archivos o canalizaciones). ReadConsole y WriteConsole generan un error si se utilizan con un identificador estándar redirigido que ya no es un identificador de consola.

Para obtener la entrada de teclado, un proceso puede utilizar ReadFile o ReadConsole con un identificador para el búfer de entrada de la consola, o puede usar ReadFile para leer la entrada de un archivo o una canalización si STDIN se ha redirigido. Estas funciones solo devuelven eventos de teclado que se pueden traducir a caracteres ANSI o Unicode. La entrada que se puede devolver incluye combinaciones de teclas de control. Las funciones no devuelven eventos de teclado en los que intervienen teclas de función ni teclas de dirección. Se descartan los eventos de entrada que genera la entrada de mouse, ventana, foco o menú.

Si el modo de entrada de línea está habilitado (modo predeterminado), ReadFile y ReadConsole no devuelven resultados a la aplicación que realiza la llamada hasta que se presione la tecla ENTRAR. Si el modo de entrada de línea está deshabilitado, las funciones no devuelven resultados hasta que hay al menos un carácter disponible. En cualquiera de los modos, se leen todos los caracteres disponibles hasta que ya no hay más teclas disponibles o hasta que se lee el número especificado de caracteres. Los caracteres no leídos se almacenan en búfer hasta la siguiente operación de lectura. Las funciones notifican el número total de caracteres leídos realmente. Si el modo de entrada de eco está habilitado, los caracteres que leen estas funciones se escriben en el búfer de pantalla activo en la posición actual del cursor.

Un proceso puede utilizar WriteFile o WriteConsole para escribir en un búfer de pantalla activo o inactivo, o bien puede usar WriteFile para escribir en un archivo o una canalización si se ha redirigido STDOUT. Los modos de salida procesado y de ajuste en EOL controlan cómo se escriben o repiten los caracteres en un búfer de pantalla.

Los caracteres que se escriben mediante WriteFile o WriteConsole, o que se repiten mediante ReadFile o ReadConsole, se insertan en un búfer de pantalla en la posición actual del cursor. A medida que se escribe cada carácter, la posición del cursor avanza hasta la siguiente celda de carácter. Sin embargo, el comportamiento al final de una fila depende del modo de salida de ajuste en EOL del búfer de pantalla de consola.

Puede obtener más detalles sobre la posición del cursor a través de las secuencias de terminales virtuales, específicamente, en la categoría de estado de consulta para buscar la posición actual y en la categoría de posicionamiento del cursor para establecer esta posición. Como alternativa, una aplicación puede utilizar la función GetConsoleScreenBufferInfo para determinar la posición actual del cursor y la función SetConsoleCursorPosition para establecer la posición del cursor. Sin embargo, se prefiere el mecanismo de secuencias de terminal virtual para todas las acciones nuevas y en curso de desarrollo. Puede obtener más detalles acerca de la estrategia subyacente a esta decisión en la documentación sobre funciones clásicas frente a terminal virtual y nuestro plan de desarrollo del ecosistema.

Para ver un ejemplo en el que se utilizan las funciones de E/S de consola de alto nivel, consulte Uso de las funciones de Entrada y Salida de alto nivel.