Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры ОС1.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1.61 Mб
Скачать

21. Работа с файлами в ос Windows: синхронная и асинхронная.

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

Работа с файлами в ОС WINDOWS организована на др. уровне по сравнению с ОС UNIX

CreateFile – данная функция открывает и создает файл, однако этим её возможности не исчерпываются. Перечислим объекты которые можно открыть при помощи этой функции: 1)файлы 2)консольные потоки 3)коммуникационные ресурсы (порты компов COM, LPT) 4)каталоги 5) дисковые устройства 6) дрова 7) почтовые ящики 8) каналы

Все перечисленные объекты закрываются стандартной функцией CloseHandle.

Однако после получения дескриптора на объект дальнейшая работа ведется с помощью различных функций зависящих от типа объекта. После получения дескриптора на объект работа с объектом идет по одному из 2-ух направлений:

1) файлы, консольные потоки, ком. потоки, почтовые ящики, каналы

2)каталоги, дисковые устройства, дрова

Первое направление используется для обмена данными, ф-ции: ReadFile, ReadFileEx, WriteFile, WriteFileEx

Второе: DeviceIoControl

Помимо этого для каждого конкретного объекта имеется набор функций специфичных для данного типа объекта.

Основное отличие ф-ций чтения и записи в файл в ОС WINDOWS от соответствующих функций в ОС UNIX (Read, Write) заключается в том, что в WINDOWS возможна как синхронное так и асинхронное выполнение файловых операций.

Открытие файла в асинхронном режиме предполагает передачу при открытии файла в параметре флагов значения FILE_FLAG_OVERLAPPED, а также передачу указателя на структуру OVERLAPPED. Физический смысл асинхронной операции - возврат из функции чтения (записи) происходит сразу же после начала операции, а не после её окончания. Программа может продолжать своё выполнение, но при этом параллельно с ней будет выполняться операция работы с файлами. После того как закончится работа с файлами взводится специальное событие, сигнализирующее об окончании операции.

Проверить событие можно либо с помощью стандартных функций WaitFor, либо с помощью специальной функции GetOverlappedResult. Получить реальное количество записанных или считанных байт можно только с помощью этой функции.

Асинхронная операция является базовой. Из асинхронной операции всегда можно сделать синхронную, но не наоборот.

При работе с файлами с помощью функций ReadFileEx и WriteFileEx не используется событие окончания операции. Вместо этого по окончании операции производится вызов указанной программистом функции FileIOCompletionRoutine Такая организация называется Asynchronous Procedure Call.

Ф-ция FileIOCompletion будет вызвана только в том случае, если нить находится в особом состоянии, так называемым “тревожном” состоянии (alertable state). Нить находится в этом состоянии при выполнении ф-ций с суффиксом Ex. Примеры таких ф-ций: SleepEx, WaitForSingleObjectEx, WaitForMultipleObjectsEx. Для асинхронных операций понятие файлового указателя не работает (функции SetFilePointer, GetFilePointer бесполезны).