Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответ - Екзаменаційні питання з курсу ОС.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

20. Функції Windows api для читання даних з файлу та запису в файл. Синхронні і асинхронні операції з файлами. Функции api для работы с консолью

Программирование > Создание Windows-приложений > Функции API для работы с консолью

Для начала работы с консолью необходимо получить ее дескриптор.

Функция получения дескриптора стандартного устройства ввода, вывода или ошибки в зависимости от переданного константного параметра: HANDLE WINAPI GetStdHandle(__in DWORD nStdHandle);

nStdHandle может принимать значения

  • STD_INPUT_HANDLE = -10;  // устройство ввода

  • STD_OUTPUT_HANDLE = -11;  // устройство вывода

  • STD_ERROR_HANDLE = -12;  // ошибка

Использование русского языка в консоли с помощью api

Для указания кодовой страницы используются функции

  • Кодовая страница консоли вывода BOOL WINAPI SetConsoleOutputCP(UINT wCodePageID);

  • Кодовая страница консоли ввода BOOL WINAPI SetConsoleCP(UINT wCodePageID);

где wCodePageID - номер кодовой страницы. Для перекодировки на русский язык используется кодовая страницаwCodePageID=1251.

Для перекодировки русского текста, введенного в Win-коде также может использоваться функция BOOL WINAPI CharToOem(LPCTSTR lpszSrc, LPSTR lpszDst)

  • lpszSrc – указатель на строку-источник;

  • lpszDst/strong> – указатель на строку-приемник

Возвращаемое значение 1 в случае успешной перекодировки.

Чтение/запись данных в консоль/файл

Для чтения и записи данных в консоль используются функции

  • Чтение данных  BOOL WINAPI ReadFile( _In_   HANDLE hFile, _Out_   LPVOID lpBuffer, _In_   DWORD nNumberOfBytesToRead, _Out_   LPDWORD lpNumberOfBytesRead, _Inout_ LPOVERLAPPED lpOverlapped);

  • Запись данных  BOOL WINAPI WriteFile( _In_   HANDLE hFile, _In_   LPCVOID lpBuffer, _In_   DWORD nNumberOfBytesToWrite, _Out_   LPDWORD lpNumberOfBytesWritten, _Inout_ LPOVERLAPPED lpOverlapped);

В случае успешного завершения функции возвращают ненулевое значение. Аргументы функций

  • hFile -дескриптор файла/консоли. Файл/консоль должен иметь доступ для чтения для функции ReadFile() и доступ для записи для функцииWriteFile().

  • lpBuffer - указатель на буфер (строку) для чтения/записи данных.

  • nNumberOfBytesToWrite - число байтов, которые будут записаны в файл.

  • lpNumberOfBytesWritten - указатель на переменную, которая получает число считанных/записанных байтов.

  • lpOverlapped - указатель на структуру OVERLAPPED, которая используется в операциях асинхронного ввода-вывода (например, получение данных по интерфейсу связи). Для синхронного ввода-вывода данный указатель имеет значение NULL.

Установка заголовка окна консоли

Функция установки заголовка окна консоли BOOL WINAPI SetConsoleTitle(__in LPCTSTR lpConsoleTitle); lpConsoleTitle – указатель на строку имени консоли с завершающим нуль-символом

Установка цвета символов и фона в консоли

Цвет символов и фона задается с помощью констант, определяющих тетрады символов. Цвет символов

  • FOREGROUND_BLUE = 0x01

  • FOREGROUND_GREEN  = 0x02

  • FOREGROUND_RED = 0x04

  • FOREGROUND_INTENSITY = 0x08

Фон символов

  • BACKGROUND_BLUE = 0x10

  • BACKGROUND_GREEN  = 0x20

  • BACKGROUND_RED = 0x40

  • BACKGROUND_INTENSITY = 0x80

Каждая тетрада, определяющая цвет символов или фона, представляет собой значение от 0 до 15, задаваемая логической суммой соответствующих констант:

Например, цвет символов с кодом 13 задается как

FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY.

Функция определения атрибутов вводимых символов в окне консоли BOOL WINAPI SetConsoleTextAttribute( __in HANDLE hConsoleOutput, __in WORD wAttributes);

  • hConsoleOutput – дескриптор буфера консоли вывода;

  • wAttributes – цвет букв и фона, получаемый путем комбинации констант

Функция, задающая цвет фона консоли(путем закрашивания фона отдельных символов) BOOL WINAPI FillConsoleOutputAttribute( __in HANDLE hConsoleOutput, __in WORD wAttribute, __in DWORD nLength, __in COORD dwWriteCoord, __out LPDWORD lpNumberOfAttrsWritten);

  • hConsoleOutput – дескриптор буфера вывода консоли; wAttribute – атрибут цвета фона символа в консоли;

  • nLength – количество ячеек символов, фон которых устанавливается заданным цветом;

  • dwWriteCoord – координаты первой закрашиваемой ячейки;

  • lpNumberOfAttrsWritten – указатель на идентификатор, в который записывается количество реально закрашенных ячеек.

Для того чтобы изменить цвет всего окна консоли необходимо задать цвет символов, количество которых определяется размером окна консоли. Размер стандартного окна консоли 80x25 = 2000 символов.