СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

 

1 Бондаренко М.Ф., Качко О.Г. Операційні системи: навч. посібник. – Х.: Компанія СМІТ, 2008. – 432 с.

2 Качко Е.Г. Программирование на ассемблере. Учебное пособие по курсу «Системное программирование и операционные системы» - Харьков: ХНУРЭ, 2002 – 172 с.

3 Конспект лекцій «Програмування мовою С++» по курсу / Упоряд. Ог.Г. Качко – Харків: ХТУРЕ, 1999 – 148 с.

4 Рихтер Дж. Windows для профессионалов: создание эффективных Win 32 приложений с учетом специфики 64-разрядной версии Windows – СПб: Питер; М.: Издательско- торговый дом «Русская редакция», 2001. – 752 с.

5 Операционные системы: Деревянко А.С., Солощук М.Н. Учебное пособие. – Харьков: НТУ «ХПИ», 2003. – 574 с.


ДОДАТОК А Стандартні функції для введення – виведення даних для стандартних пристроїв. Функції для роботи з файлами.

Стандартні функції для введення – виведення даних для стандартних пристроїв.

Функція MessageBox використовується для виведення заданого повідомлення в діалоговому вікні з заданим заголовком та кнопками і іконками.

int MessageBox (

HWND hWnd, // дескриптор вікна для виведення (0 для поточного вікна)

LPCTSTR lpText, // текст для виведення в стандартному форматі

LPCTSTR lpCaption, // заголовок вікна (в стандартному форматі)

UINT uType // Тип кнопок та повідомлення

);

Функція.

Приклади типів кнопок:

MB_OK одна кнопка ОК;

MB_OKCANCEL дві кнопки – ОК та CANCEL

MB_YESNO дві кнопки – YES и NO

MB_CANCELTRYCONTINUE три кнопки: CANCEL, TRY AGAIN,

CONTINUE

Приклади іконок:

MB_ICONINFORMATION іконка для завдання інформації (буква i)

MB_ICONWARNING конка для завдання попередження (!)

MB_ICONERROR іконка для повідомлень про помилку

(хрестик на червоному фоні)

MB_ICONQUESTION іконка із знаком питання (?)

Значення, що повертається, визначає, яка кнопка натиснута.

Приклади значення, що повертається.

IDOK обрана кнопка OK

IDCANCEL обрана кнопка CANCEL

IDYES обрана кнопка YES

IDNO обрана кнопка NO

IDCONTINUE обрана кнопка CONTINUE

IDTRYAGAIN обрана кнопка TRYAGAIN

 

Функція AllocConsole:

BOOL WINAPI AllocConsole(void);

Функція створює нову консоль, якщо її не було створено автоматично (додаток не консольний). Якщо в додатку з GDI виконується консольне введення – виведення, необхідно спочатку створити консоль. Якщо консоль вже створена, нової консолі не створюється, тому ця функція не заважає виконувати консольне введення – виведення.

Якщо далі консоль не потрібна, вона може бути знищена (функція FreeConsole):

BOOL WINAPI FreeConsole(void);

Для отримання дескриптору стандартного пристрою використовується функція GetStdHandle:

Функція GetStdHandle

HANDLE WINAPI GetStdHandle( DWORD nStdHandle );

де nStdHandle – номер стандартного пристрою, може приймати наступні значення:

STD_INPUT_HANDLE – для пристрою введення;

STD_OUTPUT_HANDLE – для пристрою виведення;

STD_ERROR_HANDLE - для виведення помилок, за звичай дорівнює STD_OUTPUT_HANDLE, але це не обов’язково

 

Функція ReadConsole використовується для введення даних з консолі.

BOOL WINAPI ReadConsole(

HANDLE hConsoleInput, // Дескриптор пристрою

// (визначається функцією GetStdHandle );

LPVOID lpBuffer, // Буфер, куди дані вводяться;

DWORD nNumberOfCharsToRead, // Кількість байтів, які треба ввести;

LPDWORD lpNumberOfCharsRead, // Кількість байтів, які введені;

LPVOID lpReserved // Резервується (lpReserved =0)

);

Функція WriteConsole використовується для виведення даних на консоль.

BOOL WINAPI WriteConsole(

HANDLE hConsoleInput, // Дескриптор пристрою

//(визначається функцією GetStdHandle );

LPVOID lpBuffer, // Буфер, з якого куди дані виводяться;

DWORD nNumberOfCharsToRead, // Кількість байтів, які треба вивести;

LPDWORD lpNumberOfCharsRead, // Кількість байтів, які виведені;

LPVOID lpReserved // Резервується (lpReserved =0)

);

 

Встановлення режимів роботи консолі за допомогою функції SetConsoleMode:

BOOL WINAPI SetConsoleMode(

HANDLE hConsoleHandle, // Дескриптор консолі;

DWORD dwMode // Режим роботи консолі

);

Функція повертає режими, які були раніше встановлені.

Режими задані в таблиці А.1

Таблиця А.1 Режими роботи консолі

Режим консолі Призначення
ENABLE_ECHO_INPUT При введенні символи відображаються на екрані
ENABLE_INSERT_MODE При введенні символи записуються, починаючи з поточного положення курсору; якщо режим не задано, то починаючи з початку рядка
ENABLE_LINE_INPUT Символи вводяться в буфер тільки після натискання клавіші <Enter>.
ENABLE_QUICK_EDIT_MODE Дозволяє використовувати мишку для редагування тексту, який вводиться. Використовується разом з прапорцем ENABLE_EXTENDED_FLAGS

Рекомендація.

Якщо змінюються стандартні параметри для роботи з консоллю, необхідно спочатку прочитати ці параметри (та зберегти), потім змінити потрібним чином, виконати операцію введення або виведення, відновити режими за замовчуванням.

Для читання поточних режимів роботи консолі використовується функція GetConsoleMode:

BOOL WINAPI GetConsoleMode(

HANDLE hConsoleHandle, // Дескриптор консолі

LPDWORD lpMode // Режими роботи консолі

);

Функції для роботи з файлами.

Створення, відкриття та закриття файлів та каталогів

 

Створення (відкриття)файлів:

 

HANDLE CreateFile(

LPCTSTR lpFileName, // Імя файлу

DWORD dwDesiredAccess, //режими доступу

//(GENERIC_WRITE, GENERIC_READ)

DWORD dwShareMode, // Режими сумісного доступу

// FILE_SHARE_READ, FILE_SHARE_ WRITE

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // Атрибути

// безпеки (зазвичай 0)

DWORD dwCreationDistribution, // Режими створення файлу

// CREATE_ALWAYS, CREATE_NEW

// OPEN_EXISTING, OPEN_ALWAYS,

DWORD dwFlagsAndAttributes, // Флаги та атрибути (зазвичай 0)

HANDLE hTemplateFile // (зазвичай 0)

);

Функція повертає INVALID_HANDLE_VALUE, якщо помилка; у випадку успішного завершення повертається інше значення.

 

Створення каталогів:

BOOL WINAPI CreateDirectory(

LPCTSTR lpPathName, // Ім’я каталогу

LPSECURITY_ATTRIBUTES lpSecurityAttributes // Атрибут безпеки

);

Функція повертає FALSE, якщо не можна створити каталог; наприклад, каталог з таким ім’ям вже є. Функція GetLastError повертає ERROR_ALREADY_EXISTS, якщо такий каталог вже існував (тобто, це не помилка).

Закриття файлів:

 

BOOL WINAPI CloseHandle(

HANDLE hObject // Дескриптор файлу

);

Копіювання файлу:

BOOL CopyFile(

LPCTSTR lpExistingFileName, // Ім’я існуючого файлу

LPCTSTR lpNewFileName, // Ім’я нового файлу

BOOL bFailIfExists // Помилка, якщо файл існує

);

 

Знищення файлу:

 

BOOL DeleteFile(

LPCTSTR lpFileName // Ім’я файлу

);

 

Функції для пошуку файлів та каталогів:

 

Пошук першого файлу, який задовольняє заданій масці:

HANDLE FindFirstFile(

LPCTSTR lpFileName, // Ім’я маски

LPWIN32_FIND_DATA lpFindFileData //Адреса структури з

// інформацією

);

Структура:

typedef struct _WIN32_FIND_DATA {

DWORD dwFileAttributes; // Атрибути файлу

FILETIME ftCreationTime; // Час створення файлу

FILETIME ftLastAccessTime; // Час останнього доступу до файлу

FILETIME ftLastWriteTime; // Час останньої модифікації

DWORD nFileSizeHigh; // Розмір файлу (старша частина)

DWORD nFileSizeLow; // Розмір файлу (молодша частина)

DWORD dwReserved0; // Резерв

DWORD dwReserved1; // Резерв

TCHAR cFileName[ MAX_PATH ]; // Ім’я знайденого файлу

TCHAR cAlternateFileName[14]; // Коротке ім’я файлу

} WIN32_FIND_DATA;

 

Якщо функція повертає INVALID_HANDLE_VALUE, то немає файлів, які задовольняють масці; якщо інше значення, то пошук було проведено успішно.

Пошук наступного файлу, який задовольняє масці:

BOOL FindNextFile(

HANDLE hFindFile, // Дескриптор файлу

LPWIN32_FIND_DATA lpFindFileData //Адреса структури з

// інформацією

);

Функція повертає TRUE, якщо знайдено наступний файл і FALSE, якщо файлу не знайдено.

Якщо пошук файла по масці завершено необхідно закрити дескриптор:

BOOL FindClose( HANDLE hFindFile );

де hFindFile - дескриптор, який повертає функція FindFirstFile.

 

Функції введення – виведення для файлу:

BOOL ReadFile(

HANDLE hFile, // Дескриптор файлу (повертається

// функцією CreateFile)

LPVOID lpBuffer, // Буфер для введених даних

DWORD nNumberOfBytesToRead, //Кількість байтів для введення

LPDWORD lpNumberOfBytesRead, // Кількість байтів, які були

// прочитані

LPOVERLAPPED lpOverlapped // За звичай 0

);

BOOL WriteFile(

HANDLE hFile, // Дескриптор файлу (повертається

// функцією CreateFile)

LPVOID lpBuffer, // Буфер для введених даних

DWORD nNumberOfBytesToRead, //Кількість байтів для введення

LPDWORD lpNumberOfBytesRead, // Кількість байтів, які були

// прочитані

LPOVERLAPPED lpOverlapped // За звичай 0

);

Функції повертають TRUE при успішному завершенні; FALSE - в разі помилки введення–виведення.

 

Встановлення вказівника для файлу і кінця файлу:

Встановлення покажчика в файлі, тобто місця, з якого почнеться введення – виведення даних наступною операцією.

DWORD SetFilePointer(

HANDLE hFile, // Дескриптор файлу (повертається

// функцією CreateFile)

LONG lDistanceToMove, // Зміщення (молодша частина)

PLONG lpDistanceToMoveHigh, // Зміщення (старша частина)

DWORD dwMoveMethod // Відносно чого зміщення

);

dwMoveMethod може приймати такі значення:

FILE_BEGIN - зміщення відносно початку файлу;

FILE_CURRENT - зміщення відносно поточного положення в файлі;

FILE_END - зміщення відносно кінця файлу;

 

Функція повертає зміщення вказівника відносно початку файлу.

 

Встановлення кінця файлу:

BOOL SetEndOfFile(

HANDLE hFile // Дескриптор файлу

// (повертається функцією CreateFile)

);

Поточне положення вказівника розглядається як кінець файлу.

 

Визначення розміру файлу:

DWORD GetFileSize(

HANDLE hFile, // Дескриптор файлу

// (повертається функцією CreateFile)

LPDWORD lpFileSizeHigh // адреса, куди буде записаний

// розмір файлу (старша частина)

);

Функція повертає молодшу частину розміру файлу. Якщо розмір файлу менше 4 ГБ, то старша частина розміру дорівнює 0, в цьому випадку можна задавати замість lpFileSizeHigh значення NULL.

 

Функції для роботи з атрибутами файлу:

 

Функція SetFileAttributes:

BOOL SetFileAttributes(

LPCTSTR lpFileName, // Ім’я існуючого файлу

DWORD dwFileAttributes // Атрибути

);

 

В якості атрибутів можуть бути задані наступні значення:

FILE_ATTRIBUTE_ARCHIVE - архівний файл;

FILE_ATTRIBUTE_HIDDEN - схований фай;

FILE_ATTRIBUTE_NORMAL - звичайний файл;

FILE_ATTRIBUTE_READONLY - файл тільки для введення;

FILE_ATTRIBUTE_SYSTEM - системний файл;

FILE_ATTRIBUTE_TEMPORARY - тимчасовий файл.

 

Функція GetFileAttributes повертає значення атрибуту для поточного файлу:

 

BOOL GetFileAttributes(

LPCTSTR lpFileName, // Ім’я існуючого файлу

DWORD dwFileAttributes // Атрибути

);

 


[1] Для здолання цього обмеження дані діляться на блоки, розмір кожного блоку задовольняє обмеженню.

[2] При визначенні розмірності масиву необхідно пам'ятати, що один процес відповідає 4-х байтовому ідентифікатору.