Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
.docx
Скачиваний:
8
Добавлен:
30.10.2018
Размер:
824.42 Кб
Скачать

9. Робота з файлами. Асинхронні операції з файлами.

Асинхронные операции с файлами Одной из привлекательных черт 32-разрядного программирования является концепция параллельных процессов, реализуемая различными методами. В одних случаях (организация параллельных потоков) параллельность заключается в том, что управление периодически, через определенные кванты времени, передается от одной ветви программык другой по кругу. В результате все ветви выполняются как бы одновременно, хотя, разумеется, общее время, требуемое для выполнения каждой ветви, увеличивается. Такая методика особенно эффективна при использовании нескольких процессоров, хотя и в однопроцессорной вычислительной системе она может приводить к повышению производительности. В других случаях положительный эффект достигается за счет того, что параллельные действия выполняются различными элементами аппаратного обеспечениякомпьютера. Так, чтение данных из файла - наиболее медленная операция в современных компьютерах - осуществляется в значительной степени аппаратурой контроллера диска, работающего в режиме прямого доступа. Занятость в этой операции процессора незначительна, однако в 16-разрядных приложениях программа, выдавшая запрос на чтение данных из файла (или запись данных в файл), останавливается до завершения этойоперации, хотя в течение всего этого времени процессор почти свободен и мог бы выполнять полезную работу.

Такой режим выполнения программы, когда программа приостанавливается на времяоперации ввода-вывода, носит название синхронного или режима с ожиданием; если жепрограмма, поставив запрос на ввод-вывод, может продолжить свое выполнение, то такой режим называется асинхронным или режимом с перекрытием. В настоящем разделе будут рассмотрены основы организации асинхронного режимаприменительно к операциям с файлами.

Программа 11-2. Асинхронные операция с файлом*/ •include<windows.h> constint N=0x100000;//Количество данных в файле /•Главная функция WinMainO*/ int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ charszFileName[]="Test.dat";//Имя создаваемого файла charszT[1001;//Для формирования выводимого сообщения DWORD dwCount;//Для операций записи/чтения файла

Открытие и закрытие файла Перед тем как начать работать с файлом, программа должна либо его создать заново, либо открыть, если он был создан ранее. И та и другая операция выполняются в Win32 с помощью одной универсальной функции - CreateFile(). При успешном выполнении эта функция возвращает 32-разрядный дескриптор файла типа HANDLE, через который по- том и выполняются все операции с данным файлом. Если файл открыть не удалось, функция CreateFile() возвращает OxFFFFFFFF (-1). Функция CreateFile()HMeeT следую- щий прототип: HANDLE CreateFile( LPCTSTR lpFileName,//Адрес спецификации файла DWORD dwDesiredAccess,//Режим доступа DWORD dwShareMode,11 Режим разделения LPSECURITY_ATTRIBUTES lpSecurityAttributes,//Адрес дескриптора запщты DWORD dwCreationDistribution,//Режим открытия DWORD dwFlagsAndAttributes,//Атрибуты файла HANDLE hTemplateFile //Дескриптор открытого файла-шаблона )

Запись и чтение файла При работе с данными, содержащимися в файле, чаще других используются 3 функции: записи в файл WriteFile(), чтения из файла ReadFileO и установки файлового указателя SetFilePointer(). Функции чтения и записи имеют фактически одинаковые прототипы: BOOL ReadFile(HANDLE hFile,LPVOIDlpBuffer,DWORDnNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead,LPOVERLAPPEDlpOverlapped); BOOL WriteFile(HANDLE hFile,LPCVOIDlpBuffer,DWORDnNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten,LPOVERLAPPEDlpOverlapped);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]