文件管理(四)共享文件和内存

    文件映射可以用来在多个进程之间共享文件或者内存。要共享文件或内存,所有的进程都必须使用相同的文件映射的名称或句柄。

    要共享一个文件,首先,第一个进程使用CreateFile函数创建或者打开一个文件。然后,使用CreateFileMapping函数创建一个文件映射对象,声明文件句柄和文件映射对象的名称。所有的内核对象(event,semaphore,mutex,waitable timer,job,file mapping objects)共享同一个名称空间。因此,如果声明一个其他类型的对象使用了的名称,CreateFileMapping和OpenFileMapping函数就会执行失败。
    要共享一个不和文件关联的内存,进程必须使用CreateFileMapping函数,并将hFile设置为INVALID_HANDLE_VALUE ,而不是设置为一个已经存在的文件句柄。这样的文件映射对象由系统页面文件支持。使用INVALID_HANDLE_VALUE的hFile参数调用CreateFileMapping函数,文件映射对象的大小必须大于零。
    其他进程得到第一个进程创建的文件映射对象的最简单的方法是,调用OpenFileMapping函数,并且声明这个对象的名称。这就是已命名的共享内存(named shared memory)。如果文件映射对象没有名称,进程利用继承或者复制来得到它的句柄。
    进程要共享文件或者内存,就必须调用MapViewOfFile和MapViewOfFileEx函数来创建文件视图。他们必须利用一些互斥技术(semaphores,mutexes,events)来调整他们的权限。
    直到所有使用它的进程都调用CloseHandle函数来关闭他们的句柄,共享的文件映射对象才会被销毁。
发布了21 篇原创文章 · 获赞 6 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Perfecter/article/details/41686967