使用内存映射文件

若要使用内存映射文件,必须执行下列操作步骤:
1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件。(CreateFile)
2) 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件。(CreateFileMapping)
3) 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中。(MapViewOfFile)

当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除:
1) 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像。(UnmapViewOfFile)
2) 关闭文件映射内核对象。(CloseHandle)
3) 关闭文件内核对象。(CloseHandle)

code: 

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

       HANDLE file = CreateFile("test.txt",

                                                 GENERIC_READ|GENERIC_WRITE,

                                                 FILE_SHARE_READ|FILE_SHARE_WRITE,

                                                 NULL,

                                                 OPEN_EXISTING,

                                                 FILE_ATTRIBUTE_NORMAL,

                                                 NULL);

 

       int len = GetFileSize(file,NULL);

 

       if(file == INVALID_HANDLE_VALUE)

       {

              printf("create file error/n");

              return 0;

       }

 

       HANDLE fileMap = CreateFileMapping(file,NULL,PAGE_READWRITE,0,0,NULL);

       if(fileMap==NULL)

       {

              CloseHandle(file);

              printf("create filemaping error/n");

              return 0;

       }

 

       char *pData = (char*)MapViewOfFile(fileMap,FILE_MAP_ALL_ACCESS,0,0,0);

       if(pData==NULL)

       {

              CloseHandle(fileMap);

              CloseHandle(file);

              printf("create filemaping error/n");

              return 0;

       }

 

       for(int i=0; i<len/2; ++i)

       {

              char t = pData[i];

              pData[i] = pData[len-i-1];

              pData[len-i-1] = t;

       }

 

       UnmapViewOfFile((void*)pData);

       CloseHandle(fileMap);

       CloseHandle(file);

      

       return 0;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值