4.14 创建Mapping对象进行共享数据[注意]

说明

这里包含两个程序,名字可看文章标题和浏览器标题

第一个代码是第一个参数的,第二个代码是第二个程序的

效果图示两个程序先后执行的效果,先执行程序一,再执行程序二

效果

源码

#include

#include

#include

#define BUF_SIZE 256

LPTSTR szName = TEXT("SharedFileMappingObject");

LPTSTR szMsg = TEXT("这是另一个进程的信息");

int main(int argc, PCHAR argv[]){

HANDLE hMapFile;//文件映射句柄

LPTSTR pBuf;//共享数据缓冲区指针

//创建命名的文件映射,不代表硬盘上的文件

hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, szName);

if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE){

printf("创建文件映射错误: %d\n", GetLastError());

return 1;

}

//创建视图

pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);

if (pBuf == NULL){

printf("创建文件映射视图错误: %d\n", GetLastError());

return 2;

}

//将共享数据赋值到文件映射中,如果允许时输入了参数则使用参数

if (argc == 1){

CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg));

} else{

DWORD dwCopyLen = (strlen(argv[1])< BUF_SIZE) ? strlen(argv[1]) : BUF_SIZE;

CopyMemory((PVOID)pBuf, argv[1], dwCopyLen);

}

printf("运行程序,完成运行后,按任意键退出\n");

getchar();

//取消映射,退出

UnmapViewOfFile(pBuf);

CloseHandle(hMapFile);

}

源码

#include

#include

#define BUF_SIZE 256

TCHAR szName[] = TEXT("SharedFileMappingObject");//映射的名字要正确

int main(int argc, PCHAR argv[]){

HANDLE hMapFile;//映射对象句柄

LPTSTR pBuf;//字符串缓存指针

hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);//打开文件映射对象

if (hMapFile == NULL){

printf("打开文件映射失败: %d\n", GetLastError());

return 1;

}

//映射

pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);

if (pBuf == NULL){

printf("文件映射视图错误: %d\n", GetLastError());

return 2;

}

//弹出得到的共享数据

MessageBox(NULL, pBuf, TEXT("映射内容为"), MB_OK);

//取消映射,退出

UnmapViewOfFile(pBuf);

CloseHandle(hMapFile);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 说明 第一个程序是服务,第二个程序控制服务 好像需要管理员权限,不然启动失败.. 效果 服务程序 名字是 MiSa...
    f675b1a02698阅读 677评论 0 0
  • 系统与网络编程 select函数 select和pselect多用于I/O操作,他们见识多个文件描述符的集合,判断...
    I踏雪寻梅阅读 623评论 0 1
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,781评论 0 3
  • 串口操作 串口操作需要的头文件 #include /*标准输入输出定义*/ #include /*标准函数库定...
    旅行家John阅读 1,387评论 0 3
  • 刚下班回到家里,很累很累,我不喜欢上班,谁喜欢上班呢?又累又苦,中途出错还要接受boss的无情批判,但每天上班让我...
    温水煮酱阅读 89评论 0 1