Поделиться через


Функции ввода и вывода консоли высокого уровня

Функции ReadFile и WriteFile или функции ReadConsole и WriteConsole позволяют приложению читать входные данные консоли и записывать выходные данные консоли в виде потока символов. ReadConsole и WriteConsole ведут себя точно так же, как ReadFile и WriteFile, за исключением того, что они могут использоваться как функции с широкими символами (в которых текстовые аргументы должны использовать Юникод) или как функции ANSI (в которых текстовые аргументы должны использовать символы из набора символов Windows). Приложения, которые должны поддерживать один набор источников для поддержки Юникода или набора символов ANSI, должны использовать ReadConsole и WriteConsole.

ReadConsole и WriteConsole можно использовать только с дескрипторами консоли; ReadFile и WriteFile можно использовать с другими дескрипторами (например, с файлами или каналами). Сбой ReadConsole и WriteConsole, если используется со стандартным дескриптором, который был перенаправлен и больше не является дескриптором консоли.

Чтобы получить ввод клавиатуры, процесс может использовать ReadFile или ReadConsole с дескриптором входного буфера консоли или использовать ReadFile для чтения входных данных из файла или канала, если STDIN он был перенаправлен. Эти функции возвращают только события клавиатуры, которые можно преобразовать в символы ANSI или Юникода. Входные данные, которые можно вернуть, включают сочетания клавиш управления. Функции не возвращают события клавиатуры, включающие клавиши функции или клавиши со стрелками. Входные события, созданные мышью, окном, фокусом или вводом меню, не отображаются карта.

Если режим ввода строки включен (режим по умолчанию), ReadFile и ReadConsole не возвращаются в вызывающее приложение до нажатия клавиши ВВОД. Если режим ввода строки отключен, функции не возвращаются до тех пор, пока не будет доступен хотя бы один символ. В любом режиме все доступные символы считываются до тех пор, пока не будут доступны никакие ключи или указанное число символов было прочитано. Непрочитанные символы буферизованы до следующей операции чтения. Функции сообщают общее количество символов, которые фактически считываются. Если включен режим ввода эхо, символы, считываемые этими функциями, записываются в активный буфер экрана в текущей позиции курсора.

Процесс может использовать WriteFile или WriteConsole для записи в активный или неактивный буфер экрана, или использовать WriteFile для записи в файл или канал, если STDOUT был перенаправлен. Обработанный режим вывода и оболочка в режиме вывода EOL определяют способ записи или эхо символов в буфер экрана.

Символы, написанные writeFile или WriteConsole, или эхом ReadFile или ReadConsole, вставляются в буфер экрана в текущей позиции курсора. По мере записи каждого символа позиция курсора перемещается к следующей ячейке символов; Однако поведение в конце строки зависит от оболочки буфера экрана консоли в режиме вывода EOL.

Дополнительные сведения о расположении курсора можно найти с помощью последовательностей виртуальных терминалов, в частности в категории состояния запроса для поиска текущей позиции и категории размещения курсора для задания текущей позиции. Кроме того, приложение может использовать функцию GetConsoleScreenBufferInfo для определения текущей позиции курсора и функции SetConsoleCursorPosition, чтобы задать положение курсора. Однако механизм последовательностей виртуальных терминалов предпочтителен для всех новых и текущих разработок. Дополнительные сведения о стратегии, лежащей в основе этого решения, можно найти в классических функциях и документации по стратегии развития виртуального терминала и экосистемы.

Пример использования функций ввода-вывода консоли высокого уровня см. в разделе "Использование высокоуровневых входных и выходных функций".