内存映射或者内存管理

lovewith 2003-11-20 12:27:55
这个程序怎么写
1。把缓冲的信息准实时写到内存中,然后写到磁盘文件中。
2 磁盘文件中的数据恢复到内存中
...全文
71 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahao 2003-12-03
  • 打赏
  • 举报
回复
1 setfilepointer针对2的64次方字节,这个足够了吧:)
2 那个文件一定已经在了,否则createfile中用open_exist参数,
如果文件不在,这个函数就会失败。
ahao 2003-12-03
  • 打赏
  • 举报
回复
把数据放入内存的同时写磁盘就可以了,但最好想其他的设计吧,你这样做不一定是好方法。
lovewith 2003-11-29
  • 打赏
  • 举报
回复
#include "list"
#include "string"
#include "windows.h"
#include "iostream"
using namespace std;

typedef struct SM
{
SM(int i){
accout[0]='\0';
sprintf(accout,"A%d",i);
num = i;
}
char accout[20];
int num;
}A;
list<A *> aList;
list<A *>::iterator j;

int main()
{
int i=0;
A a[8] = {A(1),A(2),A(3),A(4),A(5),A(6),A(7),A(8)};
memset(a,0,sizeof(A)*8);

for(i=0;i<8;i++)
{
aList.push_back(&a[i]);
}
HANDLE hFile=CreateFile("Recv1.zip",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,NULL);
HANDLE hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READWRITE,
0, 0x4000000, NULL);
//CloseHandle(hFile);
// É趨´óС¡¢Æ«ÒÆÁ¿µÈ²ÎÊý
//__int64 qwFileSize = 0x4000000;
__int64 qwFileOffset = 0;
//__int64 T = 600 ;
DWORD dwBytesInBlock = 1000;
// ½«ÎļþÊý¾ÝÓ³Éäµ½½ø³ÌµÄµØÖ·¿Õ¼ä
PBYTE pbFile = (PBYTE)MapViewOfFile(hFileMapping,
FILE_MAP_ALL_ACCESS,
(DWORD)(qwFileOffset>>32), (DWORD)(qwFileOffset&0xFFFFFFFF), dwBytesInBlock);

//nReadLen=syio_Read(port[1], pbFile + qwFileOffset, QueueLen);
//qwFileOffset += nReadLen;
unsigned long nWritten = -1;
for(j=aList.begin();j!=aList.end();++j)
{
WriteFile(hFileMapping,&(*j),sizeof(*j),&nWritten,NULL);
}
UnmapViewOfFile(pbFile);
CloseHandle(hFileMapping);
CloseHandle(hFile);
//DeleteFile("Recv1.zip");
return 0;
}
我的程序写不进去
lovewith 2003-11-29
  • 打赏
  • 举报
回复
不要用MFC,比如不断写一些字符串到内存中去.再写到磁盘中去.
lovewith 2003-11-29
  • 打赏
  • 举报
回复
_strlwr( (char*)(pbFile+qwFileOffset));此句话是什么意思
flyccloud 2003-11-29
  • 打赏
  • 举报
回复
up
bluebohe 2003-11-29
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include "windows.h"
int main(int argc, char* argv[])
{
HANDLE hFile = CreateFile("J:\\a.txt",
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
int iLen=GetFileSize(hFile,NULL)+1;
HANDLE hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READWRITE, 0, iLen, NULL);
// 释放文件内核对象
CloseHandle(hFile);
__int64 qwFileOffset = 0;
PBYTE pbFile = (PBYTE)MapViewOfFile(hFileMapping,FILE_MAP_ALL_ACCESS,
(DWORD)(qwFileOffset>>32), (DWORD)(qwFileOffset&0xFFFFFFFF), iLen);
_strlwr( (char*)(pbFile+qwFileOffset));
UnmapViewOfFile(pbFile);
CloseHandle(hFileMapping);

return 0;
}
lovewith 2003-11-29
  • 打赏
  • 举报
回复
有但不能写进去啊我试了不行,不知你试了没有。
mechgoukiteng 2003-11-25
  • 打赏
  • 举报
回复
这个问题

《windows核心编程>关于内存映射那一部分说的非常清楚
xujunfeng008 2003-11-25
  • 打赏
  • 举报
回复
把数据用字节传入传去不就行了??
fierygnu 2003-11-20
  • 打赏
  • 举报
回复
问题不清楚,是不是要类似swap的功能?
1、用定时器
2、读入不行?
lovewith 2003-11-20
  • 打赏
  • 举报
回复
问题不清楚,是不是要类似swap的功能?
1、用定时器
2、读入不行?

1。把缓冲(一个窗口大小比如5条)的信息准实时写到内存中,然后写到磁盘文件中。
2。当出现问题时。磁盘文件中的数据恢复到内存中
以上做法是为了防止
当把缓冲中的数据发送到消息队列中。但是当出现故障时,防止未发送的数据丢失。这样定义一个定时器,定时地往内存写再写到磁盘文件中。这样不会出现数据丢失或者很少。因为可以从磁盘中读取到缓冲中

不知那位有相关的程序
zhouqingyuan 2003-11-20
  • 打赏
  • 举报
回复
什么意思?
goodboyyxh 2003-11-20
  • 打赏
  • 举报
回复
char szPathName[500];
memset(szPathName, 0, 500);
GetCurrentDirectory(500, szPathName);
strcat(szPathName, "\\MonitorLogFile\\SS7RunInfo.log");
if(pRunInfoFile == NULL)
{
pRunInfoFile = fopen(szPathName, "a+t");
if(pRunInfoFile == NULL)
return FALSE;
}

fseek(pRunInfoFile, 0, SEEK_END);
fprintf(pRunInfoFile, "%s\n", lpStr);
if(fflush(pRunInfoFile) == EOF)
return FALSE;
return TRUE;
双杯献酒 2003-11-20
  • 打赏
  • 举报
回复
不清楚您要什么。
goodboyyxh 2003-11-20
  • 打赏
  • 举报
回复
OnTimer()
{

}

24,857

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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