Программирование
Покупка
Основная коллекция
Тематика:
Программирование и алгоритмизация
Издательство:
Новосибирский государственный технический университет
Автор:
Гунько Андрей Васильевич
Год издания: 2019
Кол-во страниц: 74
Дополнительно
Вид издания:
Учебно-методическая литература
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7782-3961-6
Артикул: 779423.01.99
В пособии описаны методы и средства разработки многозадачного и многопоточного программного обеспечения в операционных системах семейства Windows, средства межзадачной и межпоточной коммуникации: анонимные и именованные каналы, почтовые ящики, отображаемые на память файлы, события, семафоры, взаимные исключения. Кроме того, кратко обсуждаются средства коммуникации процессов по сети, а также особенности взаимодействия приложений и системных служб. Приводятся примеры реализации программ и даются задания для самостоятельной работы, включая варианты повышенной сложности.
Рекомендовано студентам ряда технических специальностей, связанных с разработкой многозадачного и многопоточного программного обеспечения в среде операционных систем семейства Windows.
Работа подготовлена на кафедре автоматики и утверждена Редакционно-издательским советом университета в качестве учебно-методического пособия для студентов II курса, обучающихся по направлениям 27.03.04 «Управление в технических системах» и 09.03.01 «Информатика и вычислительная техника».
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 27.03.04: Управление в технических системах
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство науки и высшего образования Российской Федерации НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ А.В. ГУНЬКО ПРОГРАММИРОВАНИЕ Учебно-методическое пособие НОВОСИБИРСК 2019
УДК 004.45 (075.8) Г 948 Рецензенты: канд. техн. наук, доцент В.А. Астапчук канд. техн. наук, доцент Г.В. Саблина Гунько А.В. Г 948 Программирование: учебно-методическое пособие / А.В. Гунько. – Новосибирск: Изд-во НГТУ, 2019. – 74 с. ISBN 978-5-7782-3961-6 В пособии описаны методы и средства разработки многозадачного и многопоточного программного обеспечения в операционных системах семейства Windows, средства межзадачной и межпоточной коммуникации: анонимные и именованные каналы, почтовые ящики, отображаемые на память файлы, события, семафоры, взаимные исключения. Кроме того, кратко обсуждаются средства коммуникации процес сов по сети, а также особенности взаимодействия приложений и системных служб. Приводятся примеры реализации программ и даются задания для самостоятельной работы, включая варианты повышенной сложности. Рекомендовано студентам ряда технических специальностей, свя занных с разработкой многозадачного и многопоточного программного обеспечения в среде операционных систем семейства Windows. Работа подготовлена на кафедре автоматики и утверждена Редакционно-издательским советом университета в качестве учебно-методического пособия для студентов II курса, обучающихся по направлениям 27.03.04 «Управление в технических системах» и 09.03.01 «Информатика и вычислительная техника» УДК 004.45 (075.8) ISBN 978-5-7782-3961-6 © Гунько А.В., 2019 © Новосибирский государственный технический университет, 2019
Т е м а 1 ФАЙЛОВЫЕ ОПЕРАЦИИ WinAPI Цель работы: изучить особенности выполнения операций с файлами средствами WinAPI на языке C в операционных системах семейства Windows. Краткие теоретические сведения Операции открытия, чтения, записи и закрытия файлов Прежде всего, приложение должно открыть файл при помощи функции CreateFile. Ниже приведен прототип этой функции: HANDLE CreateFile( LPCTSTR lpFileName, // адрес строки имени файла DWORD dwDesiredAccess, // режим доступа DWORD dwShareMode, // режим совместного // использования файла LPSECURITY_ATTRIBUTES lpSecurityAttributes, // дескриптор защиты DWORD dwCreationDistribution, // параметры создания DWORD dwFlagsAndAttributes, // атрибуты файла HANDLE hTemplateFile); // идентификатор файла с атрибутами Через параметр lpFileName этой функции передается адрес текстовой строки с завершающим нулевым символом, содержащей путь и имя файла, канала или любого другого именованного объекта, который необходимо открыть или создать. Допустимое количество символов при
указании путей доступа обычно ограничивается значением МАХ_РАТН (260). С помощью параметра dwDesiredAccess следует указать нужный вид доступа. Если файл будет открыт только для чтения, в этом параметре необходимо указать флаг GENERIC_READ. Если необходимо выполнять над файлом операции чтения и записи, следует указать логическую комбинацию флагов GENERIC_READ и GENERIC_WRITE. В том случае, когда будет указан только флаг GENERIC_WRITE, операция чтения из файла будет запрещена. Если файл будет использоваться одновременно несколькими процессами, через параметр dwShareMode необходимо передать режимы совместного использования файла: FILE_SHARE_READ или FILE_SHARE_WRITE. Через параметр lpSecurityAttributes необходимо передать указатель на дескриптор защиты или значение NULL, если этот дескриптор не используется. Параметр dwCreationDistribution определяет действия, выполняемые функцией CreateFile, если приложение пытается создать файл, который уже существует. Параметр dwFlagsAndAttributes задает атрибуты и флаги для файла. Атрибуты являются характеристиками файла (а не открытого дескриптора) и игнорируются, если открывается существующий файл. Для создания нового файла рекомендуется атрибут FILE_ATTRIBUTE_ NORMAL, который можно использовать только отдельно. Последний параметр, hTemplateFile, предназначен для доступа к файлу шаблона с расширенными атрибутами для создаваемого файла. Этот параметр здесь не рассматривается. В случае успешного завершения функция CreateFile возвращает идентификатор открытого файла. При ошибке возвращается значение INVALID_HANDLE_VALUE. Для закрытия объектов любого типа, объявления недействительными их дескрипторов и освобождения системных ресурсов почти во всех случаях используется одна и та же универсальная функция: BOOL CloseHandle (HANDLE hObject);
Единственный параметр hObject – дескриптор объекта любого типа. Возвращаемое значение: в случае успешного выполнения функции – TRUE, иначе – FALSE. Попытки закрытия недействительных дескрипторов или повторного закрытия одного и того же дескриптора приводят к исключениям. Чтение из файла производится функцией BOOL ReadFile (HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); Здесь параметр hFile – дескриптор считываемого файла, который должен быть создан с правами доступа GENERIC_READ. Параметр lpBuffer является указателем на буфер в памяти, куда помещаются считываемые данные. Параметр nNumberOfBytesToRead – количество байтов, которые должны быть считаны из файла. Параметр lpNumberOfBytesRead – указатель на переменную, предназначенную для хранения числа байтов, которые были фактически считаны в результате вызова функции ReadFile. Этот параметр может принимать нулевое значение, если перед выполнением чтения указатель файла был позиционирован в конце файла или если во время чтения возникли ошибки, а также после чтения из именованного канала, работающего в режиме обмена сообщениями (работа с каналами описана далее), если переданное сообщение имеет нулевую длину. Параметр lpOverlapped – указатель на структуру OVERLAPPED. Используется для организации асинхронного режима чтения (записи). Если запись выполняется синхронно, в качестве этого параметра следует указать значение NULL. Для использования асинхронного режима файл должен быть открыт функцией CreateFile с использованием флага FILE_FLAG_OVERLAPPED. Если указан этот флаг, параметр lpOverlapped не может иметь значение NULL. Он обязательно должен содержать адрес подготовленной структуры типа OVERLAPPED. Возвращаемое функцией значение в случае успешного выполнения (которое считается таковым, даже если не был считан ни один байт изза попытки чтения с выходом за пределы файла) – TRUE, иначе – FALSE. Если значения дескриптора файла или иных параметров, используе мых при вызове функции, оказались недействительными, возникает ошибка и функция возвращает значение FALSE. Попытка выполнения чтения в ситуациях, когда указатель файла позиционирован в конце
файла, не приводит к ошибке; вместо этого количество считанных байтов (*lpNumberOfBytesRead) устанавливается равным нулю. Запись в файл производится функцией BOOL WriteFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWrite, LPOVERLAPPED lpOverlapped); Ее параметры аналогичны параметрам функции чтения из файла. Возвращаемое значение в случае успешного выполнения – TRUE, иначе – FALSE. Успешное выполнение записи еще не говорит о том, что данные действительно оказались записанными на диск, если только при создании файла с помощью функции СrеateFile не был использован флаг FILE_FLAG_WRITE_THROUGH. Если во время вызова функции указатель файла был позиционирован в конце файла, Windows увеличит длину существующего файла. Методические указания 1. Проект может быть реализован в среде Visual C++ или Borland C++ 5.0 и выше. В первом случае выбирается консольное приложение Win32 без дополнительных библиотек. В любом случае в программу необходимо добавить файл включения windows.h. 2. Проект должен предусматривать обработку исключительных ситуаций (отсутствие входных параметров, отсутствие обрабатываемого файла, ошибки создания выходного файла и записи в него). 3. Пример кода (file.cpp) программы доступен по адресу http://gun. cs.nstu.ru/winprog/file.cpp. Порядок выполнения работы 1. Написать и отладить программу, получающую в аргументах командной строки имя существующего текстового файла и символ (или число), используемый для обработки файла. 2. Результатом работы программы является выходной текстовый файл с тем же именем, что и входной, но с другим типом (расширением), содержащий текст, обработанный согласно вариантам (табл. 1), возвращаемое значение – количество выполненных операций или «–1» в случае ошибки.
Варианты заданий Т а б л и ц а 1 Задание Параметры командной строки 1. Удалить из текста заданный символ 1. Имя входного файла 2. Заданный символ 2. В конце каждой строки вставить заданный символ 1. Имя входного файла 2. Заданный символ 3. Заменить цифры на пробелы 1. Имя входного файла 2. Количество замен 4. Заменить знаки на заданный символ 1. Имя входного файла 2. Заданный символ 5. Заменить каждый пробел на два 1. Имя входного файла 2. Количество замен 6. После каждой точки вставить символ ‘\n’ 1. Имя входного файла 2. Количество замен 7. Удалить из текста все пробелы 1. Имя входного файла 2. Количество замен 8. Заменить заданные символы на пробелы 1. Имя входного файла 2. Заданный символ 9. После каждого пробела вставить точку 1.Имя входного файла 2. Количество вставок 10. Заменить все пробелы первым символом текста 1. Имя входного файла 2. Максимальное количество замен 11. Во всех парах одинаковых символов второй символ заменить на пробел 1. Имя входного файла 2. Количество замен 12. Заменить на пробелы все символы, совпадающие с первым символом в строке 1. Имя входного файла 2. Количество замен 13. Заменить заданную пару букв на символы #@ 1. Имя входного файла 2. Заданная пара букв 14. Заменить все цифры заданным символом 1. Имя входного файла 2. Заданный символ 15. Заменить на пробел все символы, совпадающие с последним символом в строке 1. Имя входного файла 2. Количество замен 16. Заменить все символы с кодами меньше 48 на пробелы 1. Имя входного файла 2. Количество замен 17. Заменить все символы с кодами больше 48 на пробелы 1. Имя входного файла 2. Количество замен
О к о н ч а н и е т а б л . 1 Задание Параметры командной строки 18. Заменить каждый третий символ на пробел 1. Имя входного файла 2. Количество замен 19. Заменить все пробелы на заданный символ 1. Имя входного файла 2. Заданный символ 20. Заменить все пары одинаковых символов на пробелы 1. Имя входного файла 2. Количество замен Содержание отчета 1. Цель работы. 2. Вариант задания. 3. Листинг программы. Контрольные вопросы 1. Что такое API? На какие категории подразделяется WinAPI? 2. Перечислите принципы, лежащие в основе WinAPI. 3. Перечислите преимущества и недостатки реализации файловых операций средствами стандартной библиотеки С и WinAPI. 4. Перечислите режимы доступа и совместного использования файла в функции CreateFile. 5. Перечислите возможные параметры создания файла функцией CreateFile. 6. Перечислите возможные атрибуты и флаги файла в функции CreateFile. 7. Каковы особенности закрытия файла функцией CloseHandle? 8. Перечислите основные параметры функции ReadFile. 9. Каковы возвращаемое значение и результаты работы функции ReadFile? 10. Перечислите основные параметры функции WriteFile. 11. Каковы возвращаемое значение и результаты работы функции WriteFile? 12. Какие в WinAPI есть дополнительные функции работы с файлами? 13. Что собой представляют файлы, отображаемые на память? 14. Для чего можно применять файлы, отображаемые на память?