
- •Процессы и задачи в Microsoft Windows
- •Запуск задач
- •Управление запущенными задачами
- •Изменение приоритета задачи
- •Определение приоритета задачи
- •Приостановка и возобновление выполнения задачи
- •Временная приостановка работы задачи
- •Завершение задачи
- •Освобождение идентификатора задачи
- •Критические секции
- •Инициализация критической секции
- •Удаление критической секции
- •Вход в критическую секцию и выход из нее
- •4. Контрольные вопросы
- •5. Содержание работы
- •Создание объекта - событие
- •Открытие объекта - событие
- •Управление состоянием объекта - событие
- •Объекты – событие с автосбросом
- •Создание объекта Mutex
- •Освобождение идентификатора объекта Mutex
- •Открытие объекта Mutex
- •Как завладеть объектом Mutex
- •Освобождение объекта Mutex
- •Как работает семафор
- •Функции для работы с семафорами
- •Создание семафора
- •Уничтожение семафора •
- •Увеличение значения счетчика семафора
- •Уменьшение значения счетчика семафора
- •Определение текущего значения счетчика семафора
- •Создание и открытие ожидаемого таймера
- •Функции для работы с ожидаемым таймером
- •Контрольные вопросы
- •Содержание работы
- •Содержание отчета
- •Теоретический материал
- •7.1. Универсальные функции для работы с файлами в операционных системах Microsoft Windows
- •Функция CreateFile
- •Функция CloseHandle
- •Функции ReadFile и WriteFile
- •Механизм отображения файлов на память
- •Создание отображения файла
- •Выполнение отображения файла в память
- •Открытие отображения
- •Отмена отображения файла
- •Принудительная запись измененных данных
- •Обмен через файлы, отображаемые на память
- •Пример приложения, использующего файлы, отображаемые на память
- •Именованные и анонимные каналы
- •Имена каналов
- •Реализации каналов
- •Создание канала
- •Установка соединения с каналом со стороны сервера
- •Пример приложения, использующего каналы передачи данных Pipes
- •Создание канала Mailslot
- •Открытие канала Mailslot
- •Запись сообщений в канал Mailslot
- •Чтение сообщений из канала Mailslot
- •Определение состояния канала Mailslot
- •Изменение состояния канала Mailslot
- •Пример приложения, использующего каналы передачи данных MailSlot
- •Пример приложения, использующего передачу сообщений между процессами
Контрольные вопросы
Какие способы передачи данных между процессами в операционных системах Microsoft Windows Вы знаете?
Поясните принцип работы механизма отображения файлов на память? Где используется данный механизм в операционной системе?
Почему в процессе отображения адресного пространства больших размеров не приводит к переполнению виртуальной памяти?
В каких операционных системах можно использовать канал передачи данных Pipe?
Поясните принцип передачи информации с помощью каналов Pipes.
Какие способы передачи данных через канал Pipe Вам известны?
Поясните принцип передачи информации с помощью каналов MailSlot.
Какие универсальные функции применяются для работы с каналами передачи данных?
Каким образом осуществляется передача сообщений между процессами?
Какой способ передачи данных между процессами является самым быстрым? Обоснуйте свой ответ.
Какой способ передачи данных между процессами позволяет осуществлять широковещательную передачу данных в рамках домена?
Какие способы передачи данных между процессами позволяет осуществлять передачу данных между процессами, запущенными на разных компьютерах?
Почему использование рассмотренных способов является более предпочтительным при разработке системного программного обеспечения по сравнению с технологиями DDE (динамического обмена данными) и OLE?
Содержание работы
Ознакомиться с кратким теоретическим материалом, ответить на контрольные вопросы;
определить номер выполняемого варианта;
разработать алгоритм работы учебного приложения;
разработать и отладить программу работы учебного приложения;
разрабатываемое учебное приложение должно обеспечивать:
ввод текстовой информации с клавиатуры;
осуществлять передачу введенной информации другому приложению (копии данного приложения), используя способ передачи данных, указанный в Вашем варианте;
осуществлять прием информации от другого приложения (копии данного приложения), используя способ передачи данных, указанный в Вашем варианте;
отображать принятую информацию;
Содержание отчета
Отчет должен содержать следующее:
титульный лист с указанием наименования и цели занятия; фамилии, имени, отчества и номера группы студента; фамилии, имени, отчества преподавателя;
дату выполнения работы;
цель занятия;
номер выполняемого варианта;
условия предложенной задачи;
код программы, реализующей учебное приложение;
выводы о проделанной работе.
Теоретический материал
7.1. Универсальные функции для работы с файлами в операционных системах Microsoft Windows
Прежде всего, рассмотрим универсальные функции: CreateFile, WriteFile, ReadFile и CloseHandle. Область использования этих функция широка: данные функции позволяют работать с файлами, каналами передачи данных, дисковыми устройствами, консолями и др. Данные функции будут использоваться нами в каждом варианте.
Функция CreateFile
Функция CreateFile предназначена не только для создания файлов. С помощью функции CreateFile можно выполнять не только создание нового файла, но и открывание существующего файла или каталога, а также изменение длины существующего файла. Кроме того, эта функция может выполнять операции не только над файлами, но и над каналами передачи данных pipe и mailslot, дисковыми устройствами и консолями.
Прототип функции CreateFile мы привели ниже:
HANDLE CreateFile ( |
|
|
|
LPCTSTR lpFileName, |
// адрес строки имени файла |
|
DWORD dwDesiredAccess, |
// режим доступа |
|
DWORD dwShareMode, |
// режим совместного использования файла |
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes, |
// дескриптор защиты |
|
DWORD dwCreationDistribution, |
// параметры создания |
|
DWORD dwFlagsAndAttributes, |
// атрибуты файла |
|
HANDLE hTemplateFile); |
// идентификатор файла с атрибутами |
Через параметр lpFileName вы должны передать этой функции адрес строки, содержащей имя файла, который вы собираетесь создать или открыть. Строка должна быть закрыта двоичным нулем.
Параметр dwDesiredAccess определяет тип доступа, который должен быть предоставлен к открываемому файлу. Здесь вы можете использовать логическую комбинацию следующих констант:
Константа |
Описание |
0 |
Доступ запрещен, однако приложение может определять атрибуты файла или устройства, открываемого при помощи функции CreateFile |
GENERIC_READ |
Разрешен доступ на чтение |
GENERIC_WRITE |
Разрешен доступ на запись |
С помощью параметра dwShareMode задаются режимы совместного использования открываемого или создаваемого файла. Для этого параметра вы можете указать комбинацию следующих констант:
Константа |
Описание |
0 |
Совместное использование файла запрещено |
FILE_SHARE_READ |
Другие приложения могут открывать файл с помощью функции CreateFile для чтения |
FILE_SHARE_WRITE |
Аналогично предыдущему, но на запись |
Через параметр lpSecurityAttributes необходимо передать указатель на дескриптор защиты или значение NULL, если этот дескриптор не используется. В наших приложениях мы не работаем с дескриптором защиты.
Параметр dwCreationDistribution определяет действия, выполняемые функцией CreateFile, если приложение пытается создать файл, который уже существует. Для этого параметра вы можете указать одну из следующих констант:
Константа |
Описание |
CREATE_NEW |
Если создаваемый файл уже существует, функция CreateFile возвращает код ошибки |
CREATE_ALWAYS |
Существующий файл перезаписывается, при этом содержимое старого файла теряется |
OPEN_EXISTING |
Открывается существующий файл. Если файл с указанным именем не существует, функция CreateFile возвращает код ошибки |
OPEN_ALWAYS |
Если указанный файл существует, он открывается. Если файл не существует, он будет создан |
TRUNCATE_EXISTING |
Если файл существует, он открывается, после чего длина файла устанавливается равной нулю. Содержимое старого файла теряется. Если же файл не существует, функция CreateFile возвращает код ошибки |
Параметр dwFlagsAndAttributes задает атрибуты и флаги для файла.
При этом можно использовать любые логические комбинации следующих атрибутов (кроме атрибута FILE_ATTRIBUTE_NORMAL, который можно использовать только отдельно):
Атрибут |
Описание |
FILE_ATTRIBUTE_ARCHIVE |
Файл был архивирован (выгружен) |
FILE_ATTRIBUTE_COMPRESSED |
Файл, имеющий этот атрибут, динамически сжимается при записи и восстанавливается при чтении. Если этот атрибут имеет каталог, то для всех расположенных в нем файлов и каталогов также выполня-ется динамическое сжатие данных |
FILE_ATTRIBUTE_NORMAL |
Остальные перечисленные в этом списка атрибуты не установлены |
FILE_ATTRIBUTE_HIDDEN |
Скрытый файл |
FILE_ATTRIBUTE_READONLY |
Файл можно только читать |
FILE_ATTRIBUTE_SYSTEM |
Файл является частью операционной системы |
В дополнение к перечисленным выше атрибутам, через параметр dwFlagsAndAttributes вы можете передать любую логическую комбинацию флагов, перечисленных ниже:
Флаг |
Описание |
FILE_FLAG_WRITE_THROUGH |
Отмена промежуточного кэширо-вания данных для уменьшения вероятности потери данных при аварии |
FILE_FLAG_NO_BUFFERING |
Отмена промежуточной буферизации или кэширования. При использова-нии этого флага необходимо выполнять чтение и запись порциями, кратными размеру сектора (обычно 512 байт) |
FILE_FLAG_OVERLAPPED |
Выполнение чтения и записи асинхронно. Во время асинхронного чтения или записи приложение может продолжать обработку данных |
FILE_FLAG_RANDOM_ACCESS |
Указывает, что к файлу будет выполняться произвольный доступ. Флаг предназначен для оптимизации кэширования |
FILE_FLAG_SEQUENTIAL_SCAN |
Указывает, что к файлу будет выполняться последовательный доступ от начала файла к его концу. Флаг предназначен для оптимизации кэширования |
FILE_FLAG_DELETE_ON_CLOSE |
Файл будет удален сразу после того как приложение закроет его иденти-фикатор. Этот флаг удобно использовать для временных файлов |
FILE_FLAG_BACKUP_SEMANTICS |
Файл будет использован для выпол-нения операции выгрузки или восста-новления. При этом выполняется проверка прав доступа |
FILE_FLAG_POSIX_SEMANTICS |
Доступ к файлу будет выполняться в соответствии со спецификацией POSIX |
И, наконец, последний параметр hTemplateFile предназначен для доступа к файлу шаблона с расширенными атрибутами для создаваемого файла. Этот параметр рассматривать не будем для экономии места. При необходимости вы найдете всю информацию по этому вопросу в документации, поставляемой вместе с SDK.
В случае успешного завершения функция CreateFile возвращает идентификатор созданного или открытого файла (или каталога). При ошибке возвращается значение INVALID_HANDLE_VALUE (а не NULL, как можно было бы предположить). Код ошибки можно определить при помощи функции GetLastError.
В том случае, если файл уже существует и были указаны константы CREATE_ALWAYS или OPEN_ALWAYS, функция CreateFile не возвращает код ошибки. В то же время в этой ситуации функция GetLastError возвращает значение ERROR_ALREADY_EXISTS.