メモリマップドファイルを活用し、メモリの中身をファイルに書き出す
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; }