程序1的資料有時需要傳送給程序b,這可以通過記憶體對映實現。
主要用到的函式:
//寫方式開啟對映,page_writecopy 為寫操作留下備份
dword dwmaximumsizehigh, //檔案對映的最大長度的高32位,一般設為0,用低32位一般就夠用了
dword dwmaximumsizelow, //檔案對映的最大長度的低32位
lpctstr lpname //共享記憶體名稱,其他程序可用這個名字來訪問這個檔案映像);
函式呼叫成功就返回乙個控制代碼,後面會繼續用到。
2.在該程序將檔案對映到乙個程序的位址空間上
__in dword dwfileoffsethigh, //檔案對映起始偏移的高32位
__in dword dwfileoffsetlow, //檔案對映起始偏移的低32位
__in size_t dwnumberofbytestomap //指定對映檔案的位元組數);
例子:
程序1中建立映像,並傳送資料
//建立檔案映像物件
lpstr strdata;
//將檔案對映到乙個程序的位址空間上
if(strdata==null)
//向對映記憶體寫資料
sprintf(strdata,m_strsenddata);
//釋放映像記憶體
unmapviewoffile(strdata);
程序2裡接收資料
//建立檔案映像物件
lpstr strdata;
//將檔案對映到乙個程序的位址空間上
if(strdata==null)
//獲取映像記憶體的資料量
m_strreceivedata.format("%s", strdata);
//釋放映像記憶體
unmapviewoffile(strdata);
使用完記得釋放映像記憶體。
程序間通訊之記憶體對映 mmap記憶體對映
讀資料端程序 mmanp r.c include include include include include include define len 0x1000 int main close fd while 1 close fd munmap addr,len return 0 寫資料端程序 ...
記憶體檔案對映 程序間通訊
記憶體對映檔案可以分為兩種 一種是普通的檔案,它需要乙個普通的檔案控制代碼,用於快速的讀寫檔案,這種檔案的資料在程序退出後會儲存在硬碟上,所以程序在下次執行時可以得到之前的資料 另一種是頁檔案,當建立記憶體對映檔案的時候傳入無效的控制代碼,這時會把頁檔案當作臨時的共享儲存空間,當程序退出後這些資料是...
C 通過記憶體對映 程序間通訊
1.為了提速,沒用序列化,改自己寫對映。2.為了方便改動變數型別,都是分配8位元組。3.我這裡的body結構體一半是a端寫b端都,另一半是b端寫a端讀,看起來比較亂。charts using system using system.io using system.collections.generi...