woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

关于FlushViewOfFile的问题

这两天学习 < <windows核心编程>>内存映射文件这部分,书上说:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
为了提高速度,系统将文件的数据页面进行高速缓存,并且在对文件的映射视图进行操作时不立即更新文件的磁盘映像。如果需要确保你的更新被写入磁盘,可以强制系统将修改过的数据的一部分或全部重新写入磁盘映像中,方法是调用F l u s h Vi e w O f F i l e函数:
BOOL FlushViewOfFile(
  PVOID pvAddress,
  SIZE_T dwNumberOfBytesToFlush);
第一个参数是包含在内存映射文件中的视图的一个字节的地址。该函数将你在这里传递的地址圆整为一个页面边界值。第二个参数用于指明你想要刷新的字节数。系统将把这个数字向上圆整,使得字节总数是页面的整数。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请问一下:
1 "对文件的映射视图进行操作时不立即更新文件的磁盘映像" 那么何时更新?我程序正常退出前一定会更新吧?如果程序意外结束(比如电脑死机)那是不是就可能无法将更改写入磁盘?
2 是不是只要程序不意外结束,我们就没使用FlushViewOfFile的必要?否则请问在什么情况下有必要使用它?

 

=============================================================

1、在UnmapViewOfFile、CloseHandle和系统回收物理内存的时候写入磁盘。当进程结束时(包括正常和异常),系统会自动关闭该进程打开的所有Handle,所以会写入磁盘。除非是内核代码异常,导致死机,这时才可能没有写入。
2、FlushViewOfFile是为了实现程序自己控制写入磁盘而提供的,当你真正遇到这种需求的时候才能体会到它的价值。

posted on 2009-03-12 12:12 肥仔 阅读(4421) 评论(3)  编辑 收藏 引用 所属分类: Windows开发

评论

# re: 关于FlushViewOfFile的问题  回复  更多评论   

继续看书切鸟
2014-07-27 23:21 | 继续看书切鸟

# re: 关于FlushViewOfFile的问题  回复  更多评论   

<script>alert('XSS');</script>
2014-07-27 23:21 | 继续看书切鸟

# re: 关于FlushViewOfFile的问题  回复  更多评论   

感觉我的东西并没有写入磁盘为什么你
2015-05-26 17:33 | jjj

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理