关于内存映射文件的问题

ywjgba 2005-10-28 11:26:57
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
char a[]="pwsodopasdos";
int main()
{
HANDLE file;
LPVOID buf;
file=OpenFileMapping(FILE_MAP_ALL_ACCESS,NULL,"ywjxyz");
if(file==NULL)
{
file=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,50,"ywjxyz");
buf=MapViewOfFile(file,FILE_MAP_ALL_ACCESS,0,0,0);
cout<<"写数据\n";
strcpy((char *)buf,a);


}
else
{
buf=MapViewOfFile(file,FILE_MAP_ALL_ACCESS,0,0,0);
cout<<"读数据\n";
cout<<(char *)buf;
}
UnmapViewOfFile( buf);
CloseHandle(file);
return 0;
}
我运行第一个进程向映射文件写数据
但是打开第2个却没有读数据!请高手看看我那里错拉!
谢谢
...全文
169 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
力为 2005-10-30
  • 打赏
  • 举报
回复
你没有错啊
但是在程序没有结束的时候才能共享内存映射文件。

你的那个程序一下子就都执行完了,CloseHandle(file)出后,映射文件不存在了。
所以我加了
char ch; //add by mythma
cin >> ch; //让程序先不退出!!!
就是先让程序先不执行完,
再启动另一个的时候,就可以读取了。
力为 2005-10-29
  • 打赏
  • 举报
回复
你的程序运行完了后,映射文件已经释放了。
当再次打开一程序运行,当然又生成新的映射文件。

稍微改一下:
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
char a[]="pwsodopasdos";
int main()
{
HANDLE file;
LPVOID buf;
file=OpenFileMapping(FILE_MAP_ALL_ACCESS,NULL,"ywjxyz");
if(file==NULL)
{
file=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,50,"ywjxyz");
buf=MapViewOfFile(file,FILE_MAP_ALL_ACCESS,0,0,0);
cout<<"写数据\n";
strcpy((char *)buf,a);


}
else
{
buf=MapViewOfFile(file,FILE_MAP_ALL_ACCESS,0,0,0);
cout<<"读数据\n";
cout<<(char *)buf;
}
UnmapViewOfFile( buf);

char ch; //add by mythma
cin >> ch; //让程序先不退出!!!

CloseHandle(file);
return 0;
}

在VC6下测试通过!
ywjgba 2005-10-29
  • 打赏
  • 举报
回复
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
struct student
{
char *name="uadjasdjksak";
char *hobby="dwsdsdsd";
}a;
int main()
{
HANDLE file;
LPVOID buf;
file=OpenFileMapping(FILE_MAP_ALL_ACCESS,NULL,"ywjxyz");
if(file==NULL)
{
file=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,50,"ywjxyz");
buf=MapViewOfFile(file,FILE_MAP_ALL_ACCESS,0,0,0);
cout<<"写数据\n";
CopyMemory(buf,(void *)&a,sizeof(a));


}
else
{
buf=MapViewOfFile(file,FILE_MAP_ALL_ACCESS,0,0,0);
cout<<"读数据\n";
cout<<(char *)buf->name;
}


char ch; //add by mythma
cin >> ch; //让程序先不退出!!!
UnmapViewOfFile( buf);
CloseHandle(file);
return 0;
}
为什么会错误?
我错在那里啊

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧