メモリマップドファイルを活用し、メモリの中身をファイルに書き出す

malloc()のように使え、そのままファイルに書き出すことができる。また、プロセス間でメモリを共有するのに便利である。

sharememory.c (共有メモリに情報を書き出す)

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct __mydata {
	long data[0xFFFFFF];
} mydata_t;

int main(int argc, char *argv[])
{
	int i =0;
	int *p = NULL;
	HANDLE h;
	HANDLE h2;
	int tmp = 0;
	mydata_t* mydata;

	h = CreateFile(
		"memorymapping.dat" ,
		GENERIC_READ | GENERIC_WRITE ,
		FILE_SHARE_READ | FILE_SHARE_WRITE ,
		NULL ,
		OPEN_ALWAYS ,
		FILE_ATTRIBUTE_NORMAL ,
		NULL
		);
	printf("HANDLE = %ld, INVALID_HANDLE_VALUE = %ld\n", h, INVALID_HANDLE_VALUE );
	h2 = CreateFileMapping(h, NULL, PAGE_READWRITE, 0, sizeof(mydata_t), "mmap");
	mydata = MapViewOfFile(h2, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(mydata_t));

	printf("address: 0x%p\n", p);

	for (i = 0; i < 128; i++) {
		mydata->data[i] = i + 'A';
	}
	tmp = FlushViewOfFile(p, 0);
	printf("FlushViewOfFile() = %d\n", tmp);

	tmp = UnmapViewOfFile(p);
	printf("UnmapViewOfFile() = %d\n", tmp);
	CloseHandle(h2);
	CloseHandle(h);

	return 0;
}