472 ______________________________Windows для профессионалов

• буфер в адресном пространстве Вашего процесса должен начинаться с адреса, зна-
чение которого делится на размер сектора без остатка.

Следующие два флага — FILE_FLAG_SEQUENTIAL_SCAN и FILE_FLAG_RAN-
DOM_ACCESS — имеют смысл, только если система буферизует данные. Когда установлен
режим FILE_FLAG_NO_BUFFERING, оба эти флага игнорируются.

Если Вы задали FILE_FLAG_SEQUENTIAL_SCAN, система считает, что Вы обращае-
тесь к файлу последовательно. Считывая порцию данных из файла, система на деле считы-
вает информации больше, чем запрошено. Это сокращает число обращений к жесткому
диску и повышает скорость работы Вашей программы. Если же Вы считываете данные из
файла в произвольном порядке, система затрачивает несколько больше времени и памяти
на кэширование данных, к которым Вы не обращались. Это нормально, но, если Вы часто
выполняете подобные действия, лучше установите флаг FILE_FEAG_RANDOM_ACCESS. Он
сообщает системе, что опережающее чтение данных не требуется.
~~    Последний флаг, связанный с управлением кэшем, — FILE_FLAG_WRITE_THROUGH —
отключает промежуточное кэширование операций записи в файл, сокращая вероятность по-
тери данных. Когда Вы устанавливаете этот флаг, система сразу же записывает на диск все
изменения, вносимые в файл. Однако система по-прежнему поддерживает внутренний кэш
для файловых данных, и в операциях чтения используются данные, помещенные в него. Если
этот флаг указан при открытии файла на сетевом сервере, \Ут32-функции записи не возвра-
щают управление вызвавшему их потоку, пока данные не будут записаны на диск сервера.

Вот и все, что касается флагов, связанных с буферизацией. Остальные значения пара-
метра dwFlagsAndAttrs функции CreateFile классификации не поддаются.

Чтобы система удалила файл после его закрытия, укажите флаг FILE_FLAG_DELE-
TE_ON_CLOSE. Обычно он применяется в сочетании с атрибутом FILE_ATTRIBUTE_TEM-
PORARY — тогда Ваша программа сможет создать временный файл, что-то записать в него,
прочесть и, наконец, закрыть, а система сама удалит временный файл — очень удобно! Если
Ваш процесс закроет описатель файла, который пока еще открыт каким-то другим процес-
сом, система удалит этот файл не сразу, а дождется закрытия всех его описателей.

Флаг FILE_FLAG_BACKUP_SEMANTICS используют в программах резервного копиро-
вания и восстановления. Прежде чем открыть или создать какой-либо файл, система обычно
проверяет атрибуты его защиты и разрешает доступ к нему только процессу с соответствую-
щими правами. Но резервное копирование трактуется особым образом, и в этом случае мож-
но подавить некоторые виды проверки при доступе к файлу. Флаг FILE_FLAG_BACK-
UP_SEMANTICS заставляет систему контролировать права доступа у процесса и, если они
достаточны, позволяет открыть файл исключительно для резервного копирования или вос-
становления. С помощью этого флага можно также открыть описатель каталога.

VWINDOWSY

V

Windows 95 не поддерживает флаг FILE_FLAG_BACKUP_SEMANTICS.

Флаг FILE_FLAG_POSIX_SEMANTICS сообщает, что при доступе к файлу следует
применять правила POSIX. Файловые системы, используемые POSIX, чувствительны к реги-
стру букв в именах файлов, и, например, JEFFREY. DOC, Jeffrey.Doc и Jeffrey.doc считаются
тремя разными файлами. В то же время MS-DOS, 16-разрядная Windows и Win32 к регистру
букв в именах файлов нечувствительны. Поэтому будьте крайне осторожны, используя
FILE_FLAG_POSIX_SEMANTICS. Файл, при создании которого установлен этот флаг, может
оказаться недоступным из приложений MS-DOS, 16-разрядной Windows и Win32.

Последний флаг, FILE_FLAG_OVERLAPPED, указывает, что Вы хотите получить
асинхронный доступ к файлу. По умолчанию (в отсутствие флага FILE_FLAG_OVERLAP-

