Основы программирования в Win32API. Марапулец Ю.В. - 60 стр.

UptoLike

Составители: 

Наиболее интересным аргументом функции CreateFile() является предпо-
следний, шестой аргумент, который является набором флагов доступа к файлу
и атрибутов файловой системы. Используя различные комбинации флагов
(табл. 4.2), можно настроить доступ к файлу самым причудливым образом.
Например, можно приказать системе удалить файл сразу же после того, как он
будет закрыт, или объявить, что файл будет использоваться для перекрываю-
щегося (overlapped) доступа (перекрывающийся доступбазовый метод осу-
ществления асинхронного ввода/вывода). Помимо прочего, флаги позволяют
управлять механизмом кэширования.
Таблица 4.2
Флаг Значение
FILE_FLAG_WRITE-
_THROUGH
Приказывает Windows осуществлять немедленную запись
данных на диск. Система может по-прежнему кэшировать опе-
рации записи, однако она будет стараться немедленно
записывать данные на диск, избегая задержек
FILE_FLAG_NO_BU-
FFERING
Приказывает системе открыть файл без использования кэши-
рования или буферизации. В комбинации с флагом
FILE_FLAG_OVERLAPPED это дает максимальную произво-
дительность при асинхронном вводе/выводе, так как осуществ-
ление ввода/вывода не зависит от функционирования менедже-
ра памяти, работа которого обычно синхронизируется. Вместе
с тем некоторые операции ввода/вывода могут потребовать
больше времени для своего завершения, так как данные не со-
храняются в кэше. Чтобы работать с файлами, открытыми в
режиме FILE_FLAG_NO_BUFFERING, приложение должно
удовлетворять определенным требованиям. В частности, жест-
кие требования предъявляются к начальному смещению, размеру
блока и адресу буферов хранения данных
FILE_FLAG_RAN-
DOM_ACCESS
Оповещает систему о том, что доступ к файлу осуществляет-
ся случайным образом. Система может использовать это об-
стоятельство для оптимизации кэширования файла
FILE_FLAG_SEQU-
ENTIAL_SCAN
Оповещает систему о том, что доступ к файлу осуществляет-
ся последовательно от начала к концу файла. Система может
использовать это обстоятельство для оптимизации кэширова-
ния файла. Если в этом режиме указатель доступа к файлу пе-
реместить в случайное место файла, операция чтения/записи
будет выполнена корректно, однако при этом кэш не будет ис-
пользован наиболее оптимальным образом
FILE_FLAG_OVER-
LAPPED
Приказывает системе инициализировать объект для перекры-
вающегося ввода/вывода
FILE_FLAG_DELE-
TE_ON_CLOSE
Приказывает системе уничтожить файл сразу же после того,
как все его дескрипторы будут закрыты. Обратите внимание,
что закрыть необходимо не только дескриптор, который был
получен с использованием флага
FILE_FLAG_DELETE_ON_CLOSE, но и все остальные деск-
рипторы файла. Если при открытии файла в этом режиме не
был использован режим FILE_SHARE_DELETE, все после-
дующие запросы на открытие файла будут отвергнуты
Окончание табл. 4.2
60
     Наиболее интересным аргументом функции CreateFile() является предпо-
следний, шестой аргумент, который является набором флагов доступа к файлу
и атрибутов файловой системы. Используя различные комбинации флагов
(табл. 4.2), можно настроить доступ к файлу самым причудливым образом.
Например, можно приказать системе удалить файл сразу же после того, как он
будет закрыт, или объявить, что файл будет использоваться для перекрываю-
щегося (overlapped) доступа (перекрывающийся доступ – базовый метод осу-
ществления асинхронного ввода/вывода). Помимо прочего, флаги позволяют
управлять механизмом кэширования.
                                                                       Таблица 4.2
      Флаг                                       Значение
                        Приказывает Windows осуществлять немедленную запись
  FILE_FLAG_WRITE-    данных на диск. Система может по-прежнему кэшировать опе-
      _THROUGH        рации записи, однако она будет стараться немедленно
                      записывать данные на диск, избегая задержек
                        Приказывает системе открыть файл без использования кэши-
                      рования или буферизации. В комбинации с флагом
                      FILE_FLAG_OVERLAPPED это дает максимальную произво-
                      дительность при асинхронном вводе/выводе, так как осуществ-
                      ление ввода/вывода не зависит от функционирования менедже-
                      ра памяти, работа которого обычно синхронизируется. Вместе
 FILE_FLAG_NO_BU-
                      с тем некоторые операции ввода/вывода могут потребовать
      FFERING
                      больше времени для своего завершения, так как данные не со-
                      храняются в кэше. Чтобы работать с файлами, открытыми в
                      режиме FILE_FLAG_NO_BUFFERING, приложение должно
                      удовлетворять определенным требованиям. В частности, жест-
                      кие требования предъявляются к начальному смещению, размеру
                      блока и адресу буферов хранения данных
                        Оповещает систему о том, что доступ к файлу осуществляет-
  FILE_FLAG_RAN-
                      ся случайным образом. Система может использовать это об-
    DOM_ACCESS
                      стоятельство для оптимизации кэширования файла
                        Оповещает систему о том, что доступ к файлу осуществляет-
                      ся последовательно от начала к концу файла. Система может
                      использовать это обстоятельство для оптимизации кэширова-
  FILE_FLAG_SEQU-
                      ния файла. Если в этом режиме указатель доступа к файлу пе-
    ENTIAL_SCAN
                      реместить в случайное место файла, операция чтения/записи
                      будет выполнена корректно, однако при этом кэш не будет ис-
                      пользован наиболее оптимальным образом
  FILE_FLAG_OVER-       Приказывает системе инициализировать объект для перекры-
       LAPPED         вающегося ввода/вывода
                        Приказывает системе уничтожить файл сразу же после того,
                      как все его дескрипторы будут закрыты. Обратите внимание,
                      что закрыть необходимо не только дескриптор, который был
  FILE_FLAG_DELE-     получен            с          использованием          флага
    TE_ON_CLOSE       FILE_FLAG_DELETE_ON_CLOSE, но и все остальные деск-
                      рипторы файла. Если при открытии файла в этом режиме не
                      был использован режим FILE_SHARE_DELETE, все после-
                      дующие запросы на открытие файла будут отвергнуты
                                                               Окончание табл. 4.2
                                      60