Открытие и закрытие устройств.




Для осуществления ввода-вывода прежде всего надо открыть устройство и получить его описатель. Операционная система Windows, насколько это возможно, скрывает от разработчиков различия между устройствами. Для открытия файла, каталога, логического и физического диска, последовательного и параллельного порта используется API-функция CreateFile.

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

Закончив работу с устройством, его следует закрыть. Для большинства устройств это делает функция CloseHandle.

Рассмотрим функцию CreateFile более подробно. Функция CreateFile определена следующим образом:

HANDLE CreateFile (

LPCTSTR IpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES IpSecurityAttributes,

DWORD dwCreationDisposition,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile);

Параметр IpFileName указывает 1) путь и имя файла или каталога, 2) имя в UNC-формате, 3) имя логического диска в виде «\\.\х:», 4) физический диск «\\.\PHYSICALDRIVEх», 5) последовательный порт «COMх», 6) параллельный порт «LPTх».

Параметр dwDesiredAccess определяет, как будет производиться обмен данными с устройством. Этому параметру можно присвоить одно из 4-х значений:

0 – считывание и запись данных на устройство производиться не будут;

GENERIC_READ – разрешает доступ к устройству только для чтения;

GENERIC_WRITE – разрешает доступ к устройству только для записи;

GENERIC_READ| GENERIC_WRITE - разрешает доступ для чтения и записи.

Параметр dwShareMode определяет привилегии при совместном использовании устройства, когда к нему возможен одновременный доступ нескольких сетевых компьютеров или нескольких процессов. Этому параметру можно присвоить одно из следующих значений:

0 – другие процессы не смогут считывать или записывать данные на устройство;

FILE_SHARE_READ – другие процессы не смогут записывать данные на устройство;

FILE_SHARE_WRITE – другие процессы не смогут считывать данные с устройства;

FILE_SHARE_READ| FILE_SHARE_WRITE - другие процессы смогут считывать или записывать данные на устройство, если оно свободно.

Параметр IpSecurityAttributes указывает на структуру SECURITY_ATTRIBUTES, позволяющую задать информацию о защите и определить, будет ли наследуемым описатель, возвращаемый CreateFile. Дескриптор защиты, содержащийся в этой структуре, применяется только при создании файла в защищенной файловой системе NTFS, в остальных случаях он игнорируется. Передаваемое значение NULL указывает, что файл создается с атрибутами защиты по умолчанию и возвращаемый описатель не может быть унаследован.

Параметр dwCreationDisposition обычно используется при открытии файлов, а не устройств других типов. Он может принимать следующие значения:

CREATE_NEW – функция CreateFile должна создать новый файл. Если файл с указанным именем уже существует, то функция не выполняется.

CREATE_ALWAYS - функция CreateFile должна создать новый файл. Если файл с указанным именем уже существует, то CreateFile его обнуляет.

OPEN_EXISTING - функция CreateFile должна открыть существующий файл или другое устройство. Если файла с указанным именем нет, то функция не выполняется.

OPEN_ALWAYS - функция CreateFile должна открыть файл, если он существует, или создать новый, если его нет.

TRUNCATE_EXISTING - функция CreateFile должна открыть существующий файл и обнулить его размер. Если файл не существует, то функция не выполняется.

При открытии с помощью CreateFile устройства, отличного от файла, значение параметра dwCreationDisposition должно быть OPEN_EXISTING.

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

Например, флаг FILE_FLAG_NO_BUFFERING указывает, что доступ к файлу должен производиться без буферизации данных. Установка этого флага иногда способна повысить скорость и оптимизировать использование памяти приложением. Флаг FILE_FLAG_OVERLAPPED задает асинхронный обмен данными с устройством. По умолчанию устройства открываются для синхронного ввода-вывода и данный флаг не устанавливается. При этом поток приостанавливает работу на время чтения данных из файла, ожидая, когда будет считана вся информация. Когда данные полностью считаны, поток снова получает управление и продолжает выполнение.

Параметр hTemplateFile передает описатель уже открытого файла или имеет значение NULL. Если он указывает описатель файла, то функция CreateFile использует атрибуты этого файла. При создании файла данный параметр игнорируется.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: