Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба10.doc
Скачиваний:
6
Добавлен:
12.11.2019
Размер:
195.58 Кб
Скачать

4. Файлы, проецируемые на физическую память из страничного файла

До сих пор мы говорили о методах, позволяющих проецировать представление файла, размещенного на диске. В то же время многие программы при выполнении создают данные, которые им нужно разделять с другими процессами. А создавать файл на диске и хранить там данные только с этой целью очень неудобно.

Прекрасно понимая это, Microsoft добавила возможность проецирования файлов непосредственно на физическую память из страничного файла, а не из специально создаваемого дискового файла. Этот способ даже проще стандартного — основанного на создании дискового файла, проецируемого в память. Во-первых, не надо вызывать CreateFile, так как создавать или открывать специальный файл не требуется, просто вызывается, как обычно, CreateFileMapping и передается INVALID_HANDLE_VALUE в параметре hFile. Тем самым указывается системе, что создавать объект «проекция файла», физическая память которого находится на диске, не надо; вместо этого следует выделить физическую память из страничного файла. Объем выделяемой памяти определяется параметрами dwMaximumSizeHigh и dwMaximumSizeLow.

Создав объект «проекция файла» и спроецировав его представление на адресное пространство своего процесса, его можно использовать так же, как и любой другой регион памяти. Если необходимо, чтобы данные стали доступны другим процессам, следует вызвать CreateFileMapping и передать в параметре pszName строку с нулевым сим волом в конце. Тогда посторонние процессы — если им понадобится сюда доступ — смогут вызвать CreateFileMapping или OpenFileMapping и передать ей то же имя.

Когда необходимость в доступе к объекту «проекция файла» отпадет, процесс должен вызвать CloseHandle. Как только все описатели объекта будут закрыты, система освободит память, переданную из страничного файла.

5. Порядок выполнения работы

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

  2. Создать файл и спроецировать его на адресное пространство, записать в проекцию массив строк. Скопировать данный из файла с помощью проекции в новый файл (файл источник и файл приемник должны быть спроецированы на адресное пространство процесса).

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

6. Контрольные вопросы

  1. Каково назначение проецируемых в память файлов?

  2. Как осуществляется проецирование в память EXE и DLL файлов?

  3. Как статические данные разделяются между экземплярами EXE и DLL?

  4. Что такое разделы в EXE и DLL файлах? Какие типы разделов бывают? Как их можно использовать для межпроцессного взаимодействия?

  5. Как создать проецируемый в память файл?

  6. Какие атрибуты защиты можно присвоить проекции файла?

  7. Обязательно ли открывать файл для создания проекции файла?

  8. Как можно использовать проекцию файла для межпроцессного взаимодействия?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]