|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Creating a File-Mapping Object
The first step in mapping a file is to open the file by calling the CreateFile function. To ensure that other processes cannot write to the portion of the file that is mapped, you should open the file with exclusive access. In addition, the file handle should remain open until the process no longer needs the file-mapping object. An easy way to obtain exclusive access is to specify zero in the fdwShareMode parameter of CreateFile. The handle returned by CreateFile is used by the CreateFileMapping function to create a file-mapping object.
The CreateFileMapping function returns a handle to the file-mapping object. This handle will be used when creating a file view so that you can access the shared memory. When you call CreateFileMapping, you specify an object name, the number of bytes to be mapped from the file, and the read/write permission for the mapped memory. The first process that calls CreateFileMapping creates the file-mapping object. Processes calling CreateFileMapping for an existing object receive a handle to the existing object. You can tell whether or not a successful call to CreateFileMapping created or opened the file-mapping object by calling the GetLastError function. GetLastError returns NO_ERROR to the creating process and ERROR_ALREADY_EXISTS to subsequent processes.
The CreateFileMapping function fails if the access flags conflict with those specified when the CreateFile function opened the file. For example, to read and write to the file:
· Specify the GENERIC_READ and GENERIC_WRITE values in the fdwAccess parameter of CreateFile. · Specify the PAGE_READWRITE value in the fdwProtect parameter of CreateFileMapping.
File Mapping Size
The size of the file-mapping object is independent of the size of the file being mapped. However, if the file-mapping object is larger than the file, the system expands the file before CreateFileMapping returns. If the file-mapping object is smaller than the file, the system maps only the specified number of bytes from the file. The dwMaximumSizeHigh and dwMaximumSizeLow parameters of CreateFileMapping allow you to specify the number of bytes to be mapped from the file. Under Windows 95, dwMaximumSizeHigh is not used because it is not supported by the 32-bit file system. The value should be zero.
When you do not want the size of the file to change (for example, when mapping read-only files), call CreateFileMapping and specify zero for both dwMaximumSizeHigh and dwMaximumSizeLow. Doing this creates a file-mapping object exactly the same size as the file. Otherwise, you must calculate or estimate the size of the finished file because file-mapping objects are static in size; once created, their size cannot increase or decrease. Windows NT: The size of a file-mapping object backed by a named file is limited by disk space. The size of a file view is limited to the largest available contiguous block of unreserved virtual memory. This is at most 2 GB minus the virtual memory already reserved by the process.
Windows 95: The size of a file-mapping object backed by a named file is also limited by disk space. The size of a file view is limited to the largest available contiguous block of unreserved virtual memory in the shared address space. This is at most 1 GB minus the virtual memory in use by other processes, such as 16-bit Windows-based applications or Win32-based applications using file mapping.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Создание Объекта File-Mapping
Первый шаг в распределении файла должен открывать файл вызывая функцию CreateFile. Чтобы проверять, что другие процессы не могут написаться в часть файла, который отображен, Вы должны открывать файл с исключительным доступом. Кроме того, файловая ручка должна остаться открытой до процесса больше не нужно файловое распределение объекта. Легкий путь получать исключительный доступ - определять нуль в параметре fdwShareMode CreateFile. Ручка возвращанная CreateFile использована функцией CreateFileMapping, чтобы создавать файловое распределение объекта.
Функция CreateFileMapping возвращает ручку в файловое распределение объекта. Эта ручка будет использована при создании файлового вида чтобы Вы можете иметь доступ к коллективной памяти. Когда Вы называете CreateFileMapping, Вы определяете объектное имя, количество байтов, которые нужно отображаться из файла, и чтения/запись разрешения для отображенной памяти. Первый процесс, который называет CreateFileMapping создает файловое распределение объекта. Обрабатывает вызов CreateFileMapping для существующего объекта получать ручку на существующий объект. Вы можете сообщить во всяком случае успешный вызов на CreateFileMapping созданное или открывшее файловое распределение объекта вызывая функцию GetLastError. GetLastError ВОЗВРАЩАЕТ NO_ERROR на создание процесса и ERROR_ALREADY_EXISTS в последующие процессы.
Функция CreateFileMapping терпит неудачу если доступ сигнализирует конфликт с теми определенное когда функция CreateFile открывала файл. Например, чтобы читать и писаться в файл:
Определять GENERIC_READ и величины GENERIC_WRITE в параметре fdwAccess CreateFile. Определять величину PAGE_READWRITE в параметре fdwProtect CreateFileMapping.
Файл, отображающий Размер
Размер файлового распределения объекта независимый размера файла, отображанного. Тем не менее, если файловое распределение объекта большее чем файл, система расширяет файл перед возврат CreateFileMapping. Если файловое распределение объекта меньшее чем файл, система отображается только определенное количество байтов из файла. dwMaximumSizeHigh И параметры dwMaximumSizeLow CreateFileMapping позволяют Вам, чтобы определять количество байтов, которые нужно отображаться из файла. Под Windows 95, dwMaximumSizeHigh не использован поскольку это не поддерживано 32- битовой файловой системой. Величина должна - нулевой.
Когда Вы не хотите, чтобы размер файла изменял (например, при распределении только для чтения файлов), вызов CreateFileMapping и определяет нуль как для dwMaximumSizeHigh так и dwMaximumSizeLow. Делая это создает файловое распределение объекта точно тот же размер как файл. В противном случае, Вы должны вычислить или оценивать размер готового файла поскольку файловое распределение объектов статические по величине; как только создано, их размер не может увеличить или уменьшаться. Windows NT: размер файлового распределения объекта возвращанного поименованным файлом ограничен дисковым пространством. Размер файлового вида ограниченный самым большим доступным непрерывным блоком незабронированной виртуальной памяти. Это - самое большее 2 GB минус виртуальную память уже зарезервированную процессом.
Windows 95: размер файлового распределения объекта возвращанного поименованным файлом также ограничен дисковым пространством. Размер файлового вида ограниченный самым большим доступным непрерывным блоком незабронированной виртуальной памяти в коллективном пространстве адреса. Это - самое большее 1 GB минус виртуальную память в использовании другими процессами, как например, 16- бит основывал приложения Windows или основывал приложения Win32, использовавшие файловое распределение.
|
|
|
|
| |