Прочие флаги функции CreateFile
октября 12 2009 by admin in Обязательный материалFILE_FLAG_DELETE_ON_CLOSE Если установлен этот флаг, файловая система удаляет файл, когда закрываются все его описатели. Этот флаг чаще всего используется совместно с атрибутом FILE__ATTRIBUTE_TEMPORARY. Когда оба эти флага установлены, ваше приложение может создать временный файл и использовать его для чтения и записи данных, а при закрытии этого файла система автоматически его удалит — очень удобно!
FILE_FLAG_BACKUP_SEMANTICS Этот флаг применяется в программах резервного копирования и восстановления данных. Обычно, прежде чем открыть или создать файл, система проверяет защиту, чтобы убедиться в наличии у процесса, пытающегося открыть файл, необходимых полномочий. Однако программы резервного копирования и восстановления в этом смысле особенные — для них существуют особые привилегии, связанные с защитой. Если установлен флаг FILE_FLAG_BACKUP_SEMANTICS, система проверяет маркер доступа вызывающего процесса, определяя, имеет ли он привилегии резервного копирования и восстановления файлов и каталогов (Backup/Restore File and Directories). При наличии соответствующих привилегий система позволяет открыть файл. Флаг FILE_FLAG_BACKUP_SEMANTICS можно также использовать при открытии каталогов.
FILE_FLAG_POSIX_SEMANTICS В Windows имена файлов могут содержать буквы в обоих регистрах, но при поиске файлов разница в регистрах не учитывается. Однако в POSIX-подсистеме при поиске файлов учитывается регистр букв в именах файлов. Флаг FILE_FLAG_POSIX_SEMANTICS заставляет CreateFile учитывать регистр букв при создании или открытии файла. Пользоваться им нужно с предельной осторожностью — если он был установлен при создании файла, этот файл может быть недоступен из Windows-приложений.
FILE_FLAG_OPEN_REPARSE_POINT По-моему, этот флаг следовало бы назвать FILE_FLAG_IGNORE_REPARSE_POINT, так как он указывает системе игнорировать атрибут дополнительных данных файла (reparse attribute), если таковой существует. Этот атрибут позволяет использовать фильтры файловой системы, чтобы изменять алгоритмы открытия, чтения, записи и закрытия файла. Обычно, если файл имеет дополнительную связанную с ним структуру данных (reparse point), требуется и изменение алгоритмов, поэтому устанавливать флаг FLAG_OPEN_REPARSE_POINT не рекомендуется.
FILE_FLAG_OPEN_NO_RECALL Если этот флаг установлен, система не восстанавливает содержимое файла из автономного хранилища данных (такого как лента) в оперативное хранилище (такое как жесткий диск). Когда к файлу подолгу не производится доступ, система может переместить содержимое файла в автономное хранилище, освобождая место на диске. При этом файл на жестком диске не уничтожается, а только удаляются данные. Открывая файл, система автоматически восстанавливает его содержимое из автономного хранилища. При установленном флаге FILE_FLAG_OPEN_NO_RECALL система не восстанавливает данные а инициирует операции обмена информацией с носителем автономного хранилища напрямую.
FILE_FLAG_OVERLAPPED Этот флаг задает асинхронный обмен данными с устройством. По умолчанию устройства открываются для синхронного ввода-вывода (флаг FILE_FLAG_OVERLAPPED не устанавливается). Большинство разработчиков используют именно синхронный ввод-вывод. При этом поток приостанавливает работу на время чтения данных из файла, ожидая, когда будет считана вся информация. Когда данные полностью считаны, поток снова получает управление и продолжает выполнение.
Поскольку операции ввода-вывода выполняются медленней большинства других, вы можете предпочесть обмениваться данными с некоторыми устройствами асинхронно. Вот как это делается. Вы вызываете некоторую функцию ОС для чтения или записи данных, но вместо того, чтобы ожидать завершения ввода-вывода, вы сразу снова получаете управление, а операцию ввода-вывода завершает ОС, используя собственные потоки. Завершая запрошенную операцию ввода-вывода, ОС может уведомить вас об этом. Асинхронный ввод-вывод — основа для создания высокопроизводительных приложений-служб. В этой главе мы подробно рассмотрим механизмы асинхронного ввода-вывода, предлагаемые Windows.