内存映射文件是32位windows程序中多进程同时共享一个数据块的唯一方法,CreateFileMapping
可以让程序对待一个文件一样对待一块内存区域,以后就可以把该内存看作用malloc得到的指针
来用。下面是一个例子,其中一个程序负责向共享文件写数据,另一个程序则创建一个线程,监视该内存文件的内容是否发生改变。若改变则通知程序显示:
1.写数据的程序
首先调用CreateFileMapping函数
m_hMap=::CreateFileMapping((HANDLE)-1,NULL,PAGE_READWRITE,0,大小,
_T("share_memory"));
在内存文件创建后获得该文件的指针:
m_pMap=::MapViewOfFile(m_hMap,FILE_MAP_WRITE,0,0,0);
然后程序可以调用m_pMap向文件中写数据了,当程序终止时要关闭映射文件
CloseHandle(m_pMap);
2.读数据的程序
首先打开文件
m_pMap=::OpenFileMapping(FILE_MAP_READ,FALSE,_T("share_memory"));
打开后,获取文件 的指针
m_pMap=::MapViewOfFile(m_hMap,FILE_MAP_WRITE,0,0,0);
然后程序就可以从m_pMap 中读数据了,最后不要忘了关闭文件
可以让程序对待一个文件一样对待一块内存区域,以后就可以把该内存看作用malloc得到的指针
来用。下面是一个例子,其中一个程序负责向共享文件写数据,另一个程序则创建一个线程,监视该内存文件的内容是否发生改变。若改变则通知程序显示:
1.写数据的程序
首先调用CreateFileMapping函数
m_hMap=::CreateFileMapping((HANDLE)-1,NULL,PAGE_READWRITE,0,大小,
_T("share_memory"));
在内存文件创建后获得该文件的指针:
m_pMap=::MapViewOfFile(m_hMap,FILE_MAP_WRITE,0,0,0);
然后程序可以调用m_pMap向文件中写数据了,当程序终止时要关闭映射文件
CloseHandle(m_pMap);
2.读数据的程序
首先打开文件
m_pMap=::OpenFileMapping(FILE_MAP_READ,FALSE,_T("share_memory"));
打开后,获取文件 的指针
m_pMap=::MapViewOfFile(m_hMap,FILE_MAP_WRITE,0,0,0);
然后程序就可以从m_pMap 中读数据了,最后不要忘了关闭文件