Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Стандартные устройства и консольный ввод-вывод



Win32 имеет три стандартных устройства для ввода, вывода и сообщения об ошибках. Имеется функция для получения дескрипторов стандартных устройств.

HANDLE GetStdHandle (DWORD nStdHandle)

Возвращаемое значение: допустимый дескриптор, если функция завершается успешно; иначе INVALID_HANDLE_VALUE.

ПараметрGetStdHandle nStdHandle должен иметь одно из следующих значений:

- STD_INPUT_HANDLE;

- STD_OUTPUT_HANDLE;

- STD_ERROR_HANDLE.

Стандартные устройства обычно назначены консоли и клавиатуре. Стандартный ввод-вывод можно перенаправлять.

GetStdHandle не создает новый дескриптор стандартного устройства и не дублирует прежний. Последовательные вызовы с одним и тем же параметром возвращают одно и то же значение дескриптора. Закрытие дескриптора стандартного устройства делает это устройства недоступным для последующего использования. Поэтому примеры программ часто открывают стандартное устройства, работают с ним, но не закрывают.

BOOL SetStdHandle (DWORD nStdHandle, HANDLE hHandle)

Возвращаемое значение: TRUE или FALSE, в зависимости от успеха или неудачи.

Параметры SetStdHandle. Возможное значение nStdHandle – те же, что и в GetStdHandle. Параметр hHandle определяет открытый файл, который должен быть стандартным устройством.

Обычно метод перенаправления стандартного ввода-вывода в пределах процесса состоит в том, чтобы использовать последовательность SetStdHandle и GetStdHandle. Полученный в результате дескриптор используется в последующих операциях ввода-вывода.

Два имени файлов зарезервированы для консольного ввода (с клавиатуры) и консольного вывода: CONINS и CONOUTS. Консоль можно использовать независимо от любого перенаправления этих стандартных устройств; для этого нужно просто открыть дескрипторы CONINS или CONOUTS с помощью CreateFile.

Для консольного ввода-вывода можно применить ReadFile и WriteFile, но лучше использовать специальные функции ReadConsole и WriteConsole. Основные их преимущества состоят в том, что эти функции обрабатывают универсальные символы (TCHAR), а не байты, а также учитывают режим консоли, установленный функцией SetConsoleMode.

BOOL SetConsoleMode (HANDLE hConsole, DWORD fdevMode)

Возвращаемое значение: TRUE, если функция завершается успешно.

Параметры SetConsoleMode.

nConsole идентифицирует буфер ввода или экрана, который должен иметь атрибут доступа GENERIC_WRITE, даже если соответствующее устройство допускает только ввод.

fdevMode определяет режим обработки символов. Значение каждого флага указывает, применяется ли этот флаг к консольному вводу или к выводу. При создании буфера установлены все флаги, кроме ENABLE_WINDOW_INPUT.

- ENABLE_LINE_INPUT функция чтения (ReadConsole) завершается, когда встречается символ возврата каретки.

- ENABLE_ECHO_INPUT читаемые символы дублируются на экране.

- ENABLE_PROCESSED_INPUT система обрабатывает символы возврата (backspace), возврата каретки и перевода строки.

- ENABLE_ PROCESSED _OUTPUT система обрабатывает символы возврата (backspace), табуляции, звукового сигнала,возврата каретки и перевода строки.

- ENABLE_WRAP_AT_EOL_OUTPUT разрешается перенос строк как при обычном, так и при дублированном выводе.

Если функция SetConsoleMode терпит неудачу, режим не изменяется и возвращается значение FALSE. Код ошибки, как обычно, возвращает GetLastError.

Функции ReadConsole и WriteConsole подобны ReadFile и WriteFile.

BOOL ReadConsole (HANDLE hConsoleInput, LPVOID lpvBuffer,

DWORD cchToRead, LPDWORD lpcchRead, LPVOID lpvReserved)

Возвращаемое значение: TRUE, если функция завершается успешно.

Параметры функции почти такие же, как в ReadFile. Два параметра выражаются в универсальных символах, а не в байтах, а lpvReserved должен иметь значение NULL.

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

BOOL FreeConsole (VOID)

BOOL AllocConsole (VOID)

FreeConsole отделяет процесс от его консоли. AllocConsole создает новую консоль, связанную со стандартным вводом, выводом и выдачей ошибок процесса. AllocConsole завершается неудачно, если процесс уже имеет консоль; чтобы избежать этой проблемы, поместите перед этой функцией вызов FreeConsole.





Дата публикования: 2015-11-01; Прочитано: 989 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...