共享內存File Mapping

文件映射允許進程將文件的內容視為進程虛擬地址空間中的內存塊??梢酝ㄟ^簡單的指針操作來實現(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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容