VC++中用内存映射文件&用CfileFind递归搜索目录
2008-11-13 19:32:48 来源:WEB开发网在软件的开发过程中,有时需要控制一些程序使他们不能同时运行,也就是多个程序间互斥运行(还包括禁止同一程序运行多个实例)。针对这一问题,我们在VisualC++6.0中利用内存映射文件实现了多个程序间的互斥运行。内存映射文件可以创建一个没有和磁盘文件相联系的内存对象,将文件的信息映射到一个进程的地址空间上,我们可以访问该文件中的数据,就如同它位于内存中一样。同时,在程序设计中可以给内存映射文件对象起一个名字,这个名字在整个系统中是唯一的,这个名字可以在多个进程之间共享,通过名字共享能实现进行信息交换,进而实现多个程序间的互斥运行。
在讲述具体的编程方法之前,让我们先介绍和内存映射文件操作有关的几个重要的函
CreateFileMapping的函数为指定的文件创建一个文件映射对象,该函数的原形如下:
HANDLECreateFileMapping(HANDLEhFile,//用于映射的文件句柄LPSECURITY?ATTRIBUTESFileMappingAttributes,//内存映射文件的安全描述符DWORDFlprotect,//文件映射对象的最大长度的高32位DWORDdwMaximumSizelow,//最大长度的低32位LPCTSTRIPNAME//指定这个内存映射文件的名字)
值得注意的是,参数如果是OXFFFFFFFF,将在操作系统虚拟内存页面替换文件中创建文件映射对象,而不是使用磁盘文件,同时必须给出这个映射对象的大小。
NAOVUEWIFFILE函数将文件的视图映射到一个进程地址空间上,返回LPVOID类型的内存指针。通过它,就可以直接访问文件视图中的信息。
LPVOIDMAPVIEWLFFILE(HANDLEHFILEMAPPINGOBUCT,//映射文件对象句柄DWORDDWDESIREDACCESS,//访问模式DWORDDWFILEOFFSETHIGH,//文件偏移地址的高32位DWORDDWFILEOFFSETHIGH,//文件偏移地址的低32位DWORDDWNUMBEROFBYTESTOMAP//映射视图的大小)
更多精彩
赞助商链接