Программирование для Windows NT (том 2)


         

к перечисленным выше атрибутам, через


В дополнение к перечисленным выше атрибутам, через параметр 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 предназначен для доступа к файлу шаблона с расширенными атрибутами создаваемого файла.

В случае успешного завершения функция CreateFile возвращает идентификатор созданного или открытого файла (или каталога), а при работе с каналом Pipe - идентификатор реализации канала.

При ошибке возвращается значение INVALID_HANDLE_VALUE (а не NULL, как можно было бы предположить). Код ошибки можно определить при помощи функции GetLastError.

В том случае, если файл уже существует и были указаны константы CREATE_ALWAYS или OPEN_ALWAYS, функция CreateFile не возвращает код ошибки. В то же время в этой ситуации функция GetLastError возвращает значение ERROR_ALREADY_EXISTS.

Приведем фрагмент исходного текста клиентского приложения, открывающего канал с именем $MyPipe$ при помощи функции CreateFile:

char   szPipeName[256];

HANDLE hNamedPipe;

strcpy(szPipeName, "\\\\.\\pipe\\$MyPipe$");

hNamedPipe = CreateFile(

    szPipeName, GENERIC_READ | GENERIC_WRITE,

    0, NULL, OPEN_EXISTING, 0, NULL);

Здесь канал открывается как для записи, так и для чтения.


Содержание  Назад  Вперед