zoukankan      html  css  js  c++  java
  • 创建内存映射文件


    a.创建或打开一个文件内核对象,该对象标识了想要用作内存映射文件的磁盘文件
    HANDLE CreateFile(PCSTR pszFileName,
    DWORD dwDesiredAccess,//如何访问文件
    DWORD dwShareMode,//如何共享文件
    PSECURITY_ATTRUBUTES psa,
    DWORD dwCreationDisposition,
    DWORD dwFlagsAndAttributes,
    HANDLE hTemplationFile)
    b.创建文件映射内核对象,告诉系统文件的大小及我们打算如何访问文件
    HANDLE CreateFileMapping(HDNDLE hFile,
    PSECURITY_ATTRIBUTES psa,
    DWORD fdwProtect,//给物理存储器的页面指定何种属性
    DWORD dwMaximumSizeHigh,//系统内存映射文件的最大大小
    DWORD dwMaximumSizeLow,
    PCTSTR pszName)
    如果想要用当前的文件大小创建一个文件映射对象,只要传0就行了,
    如果想要给文件追加数据,就要给文件最大文件大小参数留有余地
    如果当前磁盘上的文件大小为0,就不能传0给指定大小的参数
    如果给函数传入PAGE_READWRITE,系统会检查并确保磁盘上对应文件的大小不小于dwMaximumSizeHigh和dwMaximumSizeLow
    参数指定的大小

    c.把文件映射对象的部分或全部数据映射到进程的地址空间中
    PVOID MapViewOfFile(HANDLE hFileMappingObject,
    DWORD dwDesiredAccess,//如何访问数据
    DWORD dwFileOffsetHigh,//从数据文件中哪个字节开始映射
    DWORD dwFileOffsetLow,
    SIZE_T dwNumberOfBytesToMap//映射数据文件的多少字节)
    如果指定了FILE_MAP_COPY标志,系统会从页交换文件中调拨物理存储器,大小由dwNumberOfBytesToMap参数决定
    一旦某个线程写入文件映射视图中的任何内存地址,系统就会从页文交换文件中已调拨的页面中选择一个页面,把原始数
    据复制到页交换文件中的页面,然后把复制的页面复制到进程的地址空间中,各线程将访问数据的副本
    系统对原始文件进行复制时,系统会把页面的保护属性冲PAGE_WRITECOPY改为PAGE_READWRITE

    d.从进程地址空间中取消对文件内核对象的映射
    BOOL UnmapViewOfFile(PVOID pvBaseAddress)
    pvBaseAddress指定区域的基地址,必须和MapViewOfFile的返回值相同
    系统会对文件数据的页面进行缓存处理,这样在处理文件映射视图的时候就不需要随时更新磁盘上的文件
    如果需要确保所做的修改已经被写入到磁盘中,可以调用FlushViewOfFile,强制系统把部分或全部修改的数据写入到磁盘

    BOOL FlushViewOfFile(PVOID pvAddress,//视图的第一个字节地址
    SIZE_T dwNumberOfBytesToFlush//要刷新的字节数)
    为了确保FlushViewOfFile服务器也会把数据写入到磁盘上,创建文件映射对象并将它映射到视图中的时候,应该传
    FILE_FLAG_WRITE_THROUGH标识给CreateFile函数

    e.关闭文件映射内核对象

    f.关闭文件内核对象

  • 相关阅读:
    一步一步实现一个简单的OS(简单的让boot载入setup)
    hdu 1203 I NEED A OFFER!(01背包)
    面向服务与微服务架构
    ThreadLocal,LinkedBlockingQueue,线程池 获取数据库连接2改进
    deeplearning.net 0.1 document
    怎样有效的降低反复的代码
    redmine 自己定义字段mysql表结构
    c语言中使用宏,需要注意的的几点
    gcc自有的define语法,解决变量多次自加的问题
    ubuntu16.04 安装docker
  • 原文地址:https://www.cnblogs.com/xiaoxiaocaicai/p/3594820.html
Copyright © 2011-2022 走看看