共享文件和内存
文件映射可用于在两个或多个进程之间共享文件或内存。 若要共享文件或内存,所有进程都必须使用同一文件映射对象的名称或句柄。
若要共享文件,第一个进程使用 CreateFile 函数创建或打开文件。 接下来,它通过使用 CreateFileMapping 函数创建文件映射对象,指定文件句柄和文件映射对象的名称。 事件、信号量、互斥体、可等待计时器、作业和文件映射对象的名称共享同一命名空间。 因此, 如果 CreateFileMapping 和 OpenFileMapping 函数指定了由另一种类型的对象使用的名称,则它们将失败。
若要共享与文件无关的内存,进程必须使用 CreateFileMapping 函数,并将INVALID_HANDLE_VALUE指定为 hFile 参数,而不是现有文件句柄。 相应的文件映射对象访问系统分页文件支持的内存。 在对 CreateFileMapping 的调用中指定INVALID_HANDLE_VALUE hFile 时,必须指定大于零的大小。
其他进程获取由第一个进程创建的文件映射对象的句柄的最简单方法是使用 OpenFileMapping 函数并指定对象的名称。 这称为 命名共享内存。 如果文件映射对象没有名称,则进程必须通过继承或重复获取它的句柄。 有关继承和重复的详细信息,请参阅 继承。
共享文件或内存的进程必须使用 MapViewOfFile 或 MapViewOfFileEx 函数创建文件视图。 它们必须使用信号灯、互斥体、事件或其他一些互斥技术来协调其访问。 有关详细信息,请参阅 同步。
在使用该共享文件映射对象的所有进程使用 CloseHandle 函数关闭其句柄之前,不会销毁共享文件映射对象。
有关文件映射对象安全性的信息,请参阅 文件映射安全性和访问权限。
相关主题