Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Создание объекта сопоставления файлов в Windows включает открытие файла с помощью функции CreateFile . Этот процесс позволяет сопоставить содержимое файла непосредственно с памятью для эффективного доступа и манипуляции. Чтобы убедиться, что другие процессы не могут записывать в часть сопоставленного файла, следует открыть файл с монопольным доступом. Кроме того, дескриптор файла должен оставаться открытым, пока процесс больше не нуждается в объекте сопоставления файлов. Простой способ получить эксклюзивный доступ — указать ноль в параметре fdwShareModeCreateFile. Дескриптор, возвращаемый CreateFile, используется функцией CreateFileMapping для создания объекта отображения файла.
Функция CreateFileMapping возвращает дескриптор объекта сопоставления файлов. Этот дескриптор будет использоваться при создании представления файлов, чтобы получить доступ к общей памяти. При вызове CreateFileMapping указывается имя объекта, количество байтов, сопоставленное с файлом, и разрешение на чтение и запись для сопоставленной памяти. Первый процесс, вызывающий CreateFileMapping , создает объект сопоставления файлов. Процессы, вызывающие CreateFileMapping для существующего объекта, получают дескриптор к этому объекту. Можно определить, успешно ли вызов CreateFileMapping создал или открыл объект сопоставления файлов, используя функцию GetLastError. GetLastError возвращает NO_ERROR к процессу создания и ERROR_ALREADY_EXISTS последующим процессам.
Функция CreateFileMapping завершается ошибкой, если флаги доступа конфликтуют с указанными, когда функция CreateFile открыла файл. Например, для чтения и записи в файл:
- Укажите значения GENERIC_READ и GENERIC_WRITE в параметре fdwAccess функции CreateFile.
- Укажите значение PAGE_READWRITE в параметре fdwProtectcreateFileMapping.
Создание объекта сопоставления файлов не выделяет физическую память, а только резервирует её.
Размер сопоставления файлов
Размер объекта сопоставления файлов не зависит от размера сопоставленного файла. Однако если объект сопоставления файлов больше файла, система расширяет файл до возврата CreateFileMapping . Если объект сопоставления файлов меньше файла, система сопоставляет только указанное число байтов из файла.
Параметры dwMaximumSizeHigh и dwMaximumSizeLowcreateFileMapping позволяют указать количество байтов, которые необходимо сопоставить из файла:
Если размер файла не изменяется (например, при сопоставлении файлов только для чтения), вызовите CreateFileMapping и укажите ноль для dwMaximumSizeHigh и dwMaximumSizeLow. При этом создается объект сопоставления файлов, который точно такой же размер, как и файл. В противном случае необходимо вычислить или оценить размер готового файла, так как объекты сопоставления файлов имеют статический размер; После создания их размер нельзя увеличить или уменьшить. Попытка сопоставить файл с длиной нуля таким образом завершается ошибкой с кодом ошибки ERROR_FILE_INVALID. Программы должны тестировать файлы с нулевой длиной и отклонять такие файлы.
Размер объекта сопоставления файлов, поддерживаемого именованным файлом, ограничен пространством на диске. Размер представления файла ограничен самым большим доступным блоком непрерывной виртуальной памяти.
Размер объекта сопоставления файлов, который вы выбираете, определяет, насколько далеко в файле можно "просмотреть" с использованием сопоставления памяти. При создании объекта сопоставления файлов размером 500 КБ у вас есть доступ только к первому 500 КБ файла независимо от размера файла. Так как создание большего объекта сопоставления файлов не требует использования системных ресурсов, создайте объект сопоставления файлов, размер которого соответствует размеру файла (задайте параметры dwMaximumSizeHigh и dwMaximumSizeLow функции CreateFileMapping обоим равными нулю), даже если вы не планируете просматривать весь файл. Затраты на системные ресурсы возникают при создании представлений и доступе к ним.
Вы можете просмотреть часть файла, которая не начинается в начале файла. Дополнительные сведения см. в разделе "Создание представления в файле".