Define std_error_handle (dword) -12

Завдання на лабораторну роботу:

1. вивчити системні функції стандартного введення-виведення MS Windows.

2. скласти програму з використанням вивчених функцій за вказівкою викладача.

Лабораторна робота № 2

БАЗОВІ ЗАСОБИ ВИКОРИСТАННЯ файлової системи

Для повноцінного використання файлової системи необхідно мати засоби для роботи з будь-яким файлом, зазначеним всередині програми. Для виконання читання з файлу або запису в нього потрібно значення хендлом, пов'язаного з цим файлом. Хендл файлу може бути отриманий в ОС Windows системної функцією CreateFile. Робота з файлом завершується системної функцією CloseHandle.

Функція CreateFile призначена і для власне створення і, зокрема, для відкриття вже існуючого файлу. Зауважимо, що в MS Windows є два варіанти функції створення та відкриття файлу, що відрізняються останній додатковій буквою А чи W. Перший варіант відповідає використанню кодування символів за стандартом ANSI, а другий - за стандартом UNICODE. Другий варіант задіє не один, а два байта на кожен символ. На даний момент будемо використовувати більш консервативний варіант ANSI.

HANDLE CreateFile (LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAttributes, HANDLE hTemplateFile);

де lpFileName задає покажчик на ім'я файлу, dwDesiredAccess - код бажаного доступу, dwShareMode - код режиму поділу роботи з файлом, lpSecurityAttributes - покажчик на атрибут захисту файлу, dwCreationDisposition - код дії над файлом під час виконання даної функції, dwFlagsAttributes - прапори атрибутів, hTemplateFile - хендл файлу шаблону з розширеними атрибутами.

Параметр dwFlagsAttributes задає атрибут файлу, що відкривається. У цьому атрибуті використовуються окремі біти. Звичайний (нормальний) файл має атрибут, рівний 0, файл, доступний тільки для читання - атрибут 1, прихований файл - атрибут, що дорівнює 2, системний файл - атрибут, що дорівнює 4. Найчастіше в якості цього параметра можна використовувати символічну константу FILE_ATTRIBUTE_NORMAL. Для кодування доступу до що відкривається файлу служать дві символічні константи GENERIC_READ і GENERIC_WRITE, які задають відповідно дозвіл на читання і запис в файл. Вони можуть використовуватися спільно, шляхом об'єднання (операцією логічного АБО) в одному параметрі dwDesiredAccess. або окремо. Спільне використання файлів задається символічним константами FILE_SHARE_READ і FILE_SHARE_WRITE, які також при необхідності можна комбінувати в одному параметрі. Для завдання дій з файлом служать символічні константи CREATE_NEW, CREATE_ALWAYS, OPEN_EXISTING, OPEN_ALWAYS, TRUNCATE_EXISTING, які не можна комбінувати в одному параметрі dwCreationDisposition. а слід використовувати порізно. Константа CREATE_NEW призводить до того, що якщо заданий файл вже існує, то функція повертає помилку. Константа CREATE_ALWAYS вимагає створення файлу завжди, навіть на заміну існуючій, при цьому вміст старого файлу втрачається. Константа OPEN_EXISTING вимагає відкривати тільки існуючий файл, якщо при цьому файл з вказаним ім'ям не існує, то функція повертає помилку. Константа OPEN_ALWAYS призводить до того, що існуючий файл відкривається, а якщо файл не існує, то він створюється. Константа TRUNCATE_EXISTING призводить до наступних дій: якщо файл існує, то він відкривається, після чого довжина файлу встановлюється рівною нулю, вміст файлу при цьому втрачається; якщо ж файл не існував, то функція повертає помилку.

Для закриття файлу використовується функція CloseHandle. призначення якої значно ширше, ніж просто функції закриття файлів в інших ОС. Функція ця має прототип

BOOL CloseHandle (HANDLE hObject),

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

Приклад використання розглянутих функцій ілюструє наступний приклад:

#define METHOD 0