Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ ОС ЭКЗАМЕН.docx.doc
Скачиваний:
2
Добавлен:
16.09.2019
Размер:
185.86 Кб
Скачать

15. Назначение функций:

Функция FindFirstFile осуществляет поиск в директории файла, имя которого совпадает с заданным. FindFirstFile проверяем имена поддиректорий, также как и имена файлов.

HANDLE FindFirstFile(

LPCTSTR lpFileName, // указатель на имя файла

LPWIN32_FIND_DATA lpFindFileData // указатель на полученную информацию

);

lpFindFileData - Указывает на структуру WIN32_FIND_DATA, которая получает информацию о найденном файле или поддиректории. Структура может использоваться в последовательных вызовах FindNextFile или FindClose, чтобы сослаться на файл или директорию.

Функция FindNextFile продолжает файловый поиск, начатый в прошлом вызове функцией FindFirstFile.

BOOL FindNextFile(

HANDLE hFindFile, // хэндл поиска

LPWIN32_FIND_DATA lpFindFileData // указатель на структуру данных

// найденного файла

);

FindClose () - Эта функция достаточно проста. Выполняет действия по освобождению указателя на файл. Ее необходимость очевидна – чтобы не засорять память ненужными указателями и позволять работу с файлами другим процессам. В качестве ее единственного параметра передается указатель на ранее открытый файл.

BOOL FindClose( HANDLE hFindFile );

typedef struct _WIN32_FIND_DATA {

DWORD dwFileAttributes; // Атрибуты файла

FILETIME ftCreationTime; // Время создания

FILETIME ftLastAccessTime; //Время последнего доступа

FILETIME ftLastWriteTime; //Время последней записи в файл

DWORD nFileSizeHigh; //Верхний байт размера файла

DWORD nFileSizeLow; //Нижний байт размера файла

DWORD dwReserved0; //Зарезервировано

DWORD dwReserved1; //Зарезервировано

TCHAR cFileName[ MAX_PATH ]; //Имя файла

TCHAR cAlternateFileName[ 14 ]; //Имя файла для отображения в DOS (8:3)

} WIN32_FIND_DATA;

16. Асинхронный ввод/вывод:

Асинхронный ввод и вывод означает, что метод не блокируется до тех пор, пока операция ввода или вывода не будет завершена. Затем метод возвращает данные.С помощью асинхронного ввода и вывода пользователь может вызвать метод BeginRead. Основной поток продолжать выполнять другие операции и получает возможность обработки данных позже. Также множественные запросы ввода и вывода могут обрабатываться одновременно.

Чтобы сделать асинхронный ввод/вывод нужно:

1) Определить структуру

OVERLAPPED OV;

struct{

ULONG_PTR Internal; //код ошибки о STATUS_PERDING

ULONG_PTR InternalHigh; //количество переданных байтов

UNION{

Struct{ DWORD Offset; OffHigh; }

PVOID Pointer;

};

HANDLE hEvent;

} OVERLAPPED;

memset(OV, 0 , sizeof(OV));

2) В функции CreateFile() в поле флагов задать FILE_FLAG_OVERLAPPED и указать FILE_FLAG_NO_BUFFERING.

3) В буфер, куда читаются данные должен быть выровнян на границе размера сектора и кратен его размеру.

4)В функции ReadFile(WriteFile) – выставить последний параметр - адрес &OV и в функции GetLastError() – ERROR_TO_DENDING выставить в FALSE.