mrjbom
@mrjbom

Как читать и записывать в файл используя отображение файлов в память?

Нужно организовать общение между двумя программами.

Управляющее приложение:
#include <conio.h>
#include <iostream>
#include <Windows.h>

using namespace std;

int main(int argc, char* argv[])
{
	HANDLE fileHandle = CreateFile(
		L"IPC.txt",
		GENERIC_READ | GENERIC_WRITE,
		FILE_SHARE_WRITE | FILE_SHARE_READ,
		NULL,
		OPEN_ALWAYS,
		NULL,
		NULL
	);
	if (!fileHandle) { cout << "Create file failed\n"; return 1; }
	HANDLE fileMappingHandle = CreateFileMapping(
		fileHandle,
		NULL,
		PAGE_READWRITE,
		NULL,
		NULL,
		L"MyMappingFile"
	);
	if (!fileMappingHandle) { cout << "Create file mapping failed\n"; return 1; }

	LPVOID mapViewOfFileAddr = MapViewOfFile(
		fileMappingHandle,
		FILE_MAP_ALL_ACCESS,
		NULL,
		NULL,
		65536
	);
	if (!mapViewOfFileAddr) { cout << "Map view failed\n"; return 1; }
	cout << "Share success\n";
	_getch();

	UnmapViewOfFile(mapViewOfFileAddr);
	CloseHandle(fileHandle);
	CloseHandle(fileMappingHandle);
	return 0;
}


И приложение которое должно читать и иногда записывать
#include <iostream>
#include <Windows.h>

using namespace std;

int main(int argc, char* argv[])
{
	HANDLE openFileMapping = OpenFileMapping(
		GENERIC_READ | GENERIC_WRITE,
		FALSE,
		L"MyMappingFile"
	);
	if (!openFileMapping) { cout << "Open file mapping failed\n"; return 1; }

	LPVOID mapViewOfFileAddr = MapViewOfFile(
		openFileMapping,
		FILE_MAP_ALL_ACCESS,
		NULL,
		NULL,
		65536
	);
	if (!mapViewOfFileAddr) { cout << "Map view of file failed\n"; return 1; }
	cout << "Reading\n";
	CloseHandle(openFileMapping);
	return 0;
}


Вроде бы всё готово и работает.
Как теперь читать/записывать данные?
В первом приложении нужно работать, как я понял, просто с файлом.
А что делать во втором приложении для чтения/записи данных?
  • Вопрос задан
  • 441 просмотр
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
Вы отобразили файл в память, и теперь можно просто записывать данные в память по этому адресу. А они будут записываться в файл.
Это тот же механизм, что и виртуальная память. Есть файл виртуальной памяти, а какие-то его части загружены в оперативную память.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы