進程之間數據的共享可以用共用內存實現,在Win32中,進程之間共享內存使用的事映射文件。虛擬內存系統具有把實際內存映射到頁文件或者交換文件的能力。用戶可以把內存映射到任何的映射文件中,包括系統內存頁。而利用系統內存頁可以實現快捷的內存共享。
利用共有內存實現進程之間的數據共享共有兩部:
一. 使用CreateFileMapping函數創建內存映射文件。此函數需要文件句柄,對於大多數的內存共享應用程序,建此文件句柄設置爲0xFFFFFFFF即可。這樣的句柄指向系統內存頁文件。
二. 映射文件文件創建成功以後,以其返回的句柄作爲參數,調用MapViewOfFile函數爲內存映射文件對象創建視,MapViewOfFile函數將返回指向文件的視指針。可以利用此視指針對內存映射文件進行操作,內存的讀寫簡化到了就像普通變量的操作。
下面是一個利用共有內存實現進程之間的數據共享的Sample程序。
//寫內存程序
//MemWrite.cpp
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
class student
{
public:
long ID;
char name[20];
};
void main()
{
HANDLE hMemShare;
student stu;
int stu_num = 30;
student *lpstu;
stu.ID = 99041232;
strcpy(stu.name,"SecBug");
hMemShare = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,sizeof(student),"TestMemShare");
if(hMemShare == NULL)
{
cout<<"Failed to Alloocate"<<endl;
return;
}
lpstu = (student *)MapViewOfFile(hMemShare, FILE_MAP_WRITE,0,0,sizeof(student));
if(lpstu == NULL)
{
cout<<"Failed to Map"<<endl;
return;
}
*lpstu = stu;
while(1){}
UnmapViewOfFile(lpstu);
}
//讀內存程序
// MemRead.cpp
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
class student
{
public:
long ID;
char name[20];
};
void main()
{
HANDLE hMemShare;
student stu;
student *lpstu;
char *lpTch;
stu.ID = 0;
strcpy(stu.name ,"tst");
hMemShare = OpenFileMapping(FILE_MAP_READ,FALSE,"TestMemShare");
if(hMemShare == NULL)
{
cout<<"File Created Failed"<<endl;
return;
}
lpstu = (student *)MapViewOfFile(hMemShare, FILE_MAP_READ,0,0,sizeof(student));
if(lpTch == NULL)
{
cout<<"Failed to Map"<<endl;
return;
}
stu = *lpstu;
cout<<stu.ID<<endl;
cout<<stu.name<<endl;
UnmapViewOfFile(lpstu);
}
二、共享內存實現進程間大數據的交換
四、實時交互應用架構——進程間高效通信方式問題 只是提問式的回答 socket.io開發
五、進程間通信方式中一般公司用的最多的是哪幾個?做嵌入式的 百度提問