在Windows中,在同一台机器上共享数据的最底层的机制就是内存映射文件。所以,所有进程间通讯机制,都会用到内存映射文件。
这种数据共享机制是通过让两个或多个进程映射同一个文件映射对象得视图实现的,这意味着在进程间共享相同的物理存储界面。因此,当一个进程在文件映射对象视图中写入数据的时候,其他进程会在它们的视图中立刻看到变化。注意在多个进程共享同一个文件映射对象来说,所有进程使用的文件映射对象的名称必须相同。
函数解释:
打开一个映射文件对象
如果创建共享内存,其他对象不能再创建相同名字映射对象,要用以下函数去打开以及创建好的对象
为文件内容分配线性地址空间
这种数据共享机制是通过让两个或多个进程映射同一个文件映射对象得视图实现的,这意味着在进程间共享相同的物理存储界面。因此,当一个进程在文件映射对象视图中写入数据的时候,其他进程会在它们的视图中立刻看到变化。注意在多个进程共享同一个文件映射对象来说,所有进程使用的文件映射对象的名称必须相同。
函数解释:
打开一个映射文件对象
HANDLE CreateFileMapping(
HANDLE hFile, // 一个文件的句柄
LPSECURITY_ATTRIBUTES lpAttributes, // 定义内存映射文件对象是否可以继承
DWORD flProtect, // 该内存映射文件的保护类型
DWORD dwMaximumSizeHigh, // 内存映射文件的长度
DWORD dwMaximumSizeLow,
LPCTSTR lpName // 内存映射文件的名字
);
如果创建共享内存,其他对象不能再创建相同名字映射对象,要用以下函数去打开以及创建好的对象
HANDLE OpenFileMapping(
DWORD dwDesiredAccess, // 指定保护类型
BOOL bInheritHandle, // 返回的句柄是否可被继承
LPCTSTR lpName // 创建对象时使用的名字
);
为文件内容分配线性地址空间
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, // 前两个函数返回的内存映射文件对象的句柄
DWORD dwDes