文件映射允許進程將文件的內容視為進程虛擬地址空間中的內存塊??梢酝ㄟ^簡單的指針操作來實現(xiàn)對文件內容的修改。
當多個進程使用同一個file mapping,就可以實現(xiàn)進程間通信。當然,需要有同步機制(如信號量,互斥鎖,事件等)進行保護,否則會發(fā)生數(shù)據錯亂。共享內存,是file mapping的一個特殊實現(xiàn)。

// 創(chuàng)建一個想共享的文件數(shù)據句柄
HANDLE CreateFileMapping(
HANDLE hFile, //物理文件句柄
LPSECURITY_ATTRIBUTES lpAttributes, //安全設置
DWORD flProtect, //保護設置
DWORD dwMaximumSizeHigh, //高位文件大小
DWORD dwMaximumSizeLow, //低位文件大小
LPCTSTR lpName //共享內存名稱
);
// 打開一個已經存在的共享文件
HANDLE OpenFileMappingW(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCWSTR lpName
);
// 獲取共享的內存地址
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap
);
// 卸載內存映射文件地址指針
BOOL UnmapViewOfFile(
LPCVOID lpBaseAddress
);
// 把文件映射視圖中的修改的內容或全部寫回到磁盤文件中
BOOL FlushViewOfFile(
LPCVOID lpBaseAddress,
SIZE_T dwNumberOfBytesToFlush
);
Demo:
svn://gitee.com/sudaidai/Knowledge_List_of_C
文件夾路徑:WindowsAPI/File Mapping