内存映射文件的主要就是把文件映射到内存当中来  
这样一个大的文件就变得很小一个地址空间  
 
而根据API函数的说明得知:内存映射文件主要是通过对映射的文件进行操作,其中的存放读取文件的IO操作都是系统操作的  
 
那么当你修改了映射文件上的内容时,然后你退出映射文件操作,此时应该系统接着对文件写入工作进行IO操作(当文件数据足够大的时候,这个时间可能会比较长的)。那么当系统在操作的时候,然后进程如果对这个文件进行了读数据操作,那么此时的数据肯定不对的?  
 
问一下:系统关于这个问题是不是给出了自己一个保护原则?还是我们可以通过系统发出什么消息来确定上次的写操作已经完成?有谁研究过这些问题吗?

解决方案 »

  1.   

    CreateFile,CreateFileMapping和MapViewOfFile都可以且需要指定文件的访问模式的。对于缓存写入,可以调用FlushViewOfFile强制将修改保存到磁盘
      

  2.   

    FlushViewOfFile执行的时候会不会比unView要慢?
      

  3.   

    你是说UnmapViewOfFile?两个函数不是相同的功能。
    如果文件大,是有速度慢的问题,你可以单独开一个线程负责文件操作。
      

  4.   

    那你的意思是说
    先UnmapViewOfFile
    然后再FlushViewOfFile这样既保证了数据写入
    又保证了处理完这步以后 数据肯定是写入到文件中去的?
      

  5.   

    先FlushViewOfFile
    然后再UnmapViewOfFile
      

  6.   

    同楼上。
    另,FlushViewOfFile不一定要到调用UnmapViewOfFile之前才做,修改了映射文件之后就可以及时调用了。
      

  7.   

    先FlushViewOfFile
    然后再UnmapViewOfFile
    哈哈,来晚了