Second.c

First.c

#include <windows.h>#include <stdio.h> void main(void){HANDLE hMapFile;LPVOID lpMapAddress;HANDLE hFile; char * String; hFile = CreateFile("MyFile.txt", // имя файла GENERIC_READ | GENERIC_WRITE, // файл для чтения и записи FILE_SHARE_READ| FILE_SHARE_WRITE,// режим совместного доступа NULL, // защита по умолчанию OPEN_EXISTING, // файл должен существовать FILE_ATTRIBUTE_NORMAL, // атрибуты файла NULL); // файл атрибутов if (hFile == INVALID_HANDLE_VALUE) printf("Could not open file "); hMapFile = CreateFileMapping(hFile, // описатель отображаемого файла NULL, // атрибуты защиты по умолчанию PAGE_READWRITE, // режим доступа 0, // старшее двойное слово размера буфера 0, // младшее двойное слово размера буфера "MyFileObject"); // имя объекта if (hMapFile == NULL) printf("Could not create file-mapping object. "); lpMapAddress = MapViewOfFile(hMapFile, // описатель отображаемого файла FILE_MAP_ALL_ACCESS, // режимы доступа 0, 0, // отображение файла с начала 0); // отображение целого файла if (lpMapAddress == NULL) printf("Could not map view of file. "); String = (char *)lpMapAddress;sprintf(String, "Hello, world");getchar();}

Пример 10.1. (html, txt)

#include <windows.h>#include <stdio.h> void main(void){ HANDLE hMapFile;LPVOID lpMapAddress;HANDLE hFile; char * String; hFile = CreateFile("MyFile.txt", // имя файла GENERIC_READ | GENERIC_WRITE, // файл для чтения и записи FILE_SHARE_READ| FILE_SHARE_WRITE,// режим совместного доступа NULL, // защита по умолчанию OPEN_EXISTING, // файл должен существовать FILE_ATTRIBUTE_NORMAL, // атрибуты файла NULL); // файл атрибутов if (hFile == INVALID_HANDLE_VALUE) { printf("Could not open file "); // process error } hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // разрешение чтения-записи FALSE, // описатель не наследуется "MyFileObject"); // имя объекта проецируемого файла if (hMapFile == NULL) printf("Could not open Filemapping "); lpMapAddress = MapViewOfFile(hMapFile, // описатель отображаемого файла FILE_MAP_ALL_ACCESS, // режимы доступа 0, 0, // отображение файла с начала 0); // отображение целого файла if (lpMapAddress == NULL) printf("Could not map view of file. "); String = (char *)lpMapAddress;printf("%s ", String);getchar();}

Пример 10.2. (html, txt)

Программа first создает в своем адресном пространстве буфер разделяемой памяти, а программа second отображает тот же самый буфер в свое адресное пространство. Затем программа first записывает в этот буфер текстовую строку, а программа second выводит ее содержимое на экран. Обе программы должны быть запущены из одного каталога с уже существующим файлом MyFile.txt. Для наглядности рекомендуется, чтобы длина файла была изначально больше длины строки "Hello, world".

Написание, компиляция и выполнение программы обмена информацией через разделяемый буфер памяти с использованием системной области выгрузки

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