gpt4 book ai didi

c++ - 我可以在具有相同名称的本地命名空间中创建共享内存(使用 CreateFileMapping)吗?

转载 作者:行者123 更新时间:2023-11-28 07:21:44 24 4
gpt4 key购买 nike

请你帮我理解在本地/全局命名空间中是否可以有 2 个同名的共享内存对象?我知道,如果我们第一次创建了一个共享内存对象,那么我们需要调用 OpenFileMapping/MapViewOfFile 来打开一个对象。如果我在已创建的对象上调用 CreateFileMapping 会发生什么情况?

例如

CreateFileMapping(INVALID_HANDLE_VALUE,    // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // max. object size
sizeof(BackupData), // buffer size
"SharedMemory"); // name of mapping object

最佳答案

MSDN documentation CreateFileMapping 准确地告诉您需要知道的内容:

msdn

因此您不能在同一 namespace (全局或本地)中使用相同的名称。您甚至不能对不同类型的内核对象使用相同的名称。

如果您尝试创建一个与现有文件映射同名的新文件映射,它将尝试打开现有文件映射(取决于您的页面保护属性)。如果成功,您获得现有对象的句柄,但您还将从 GetLastError 获得返回值 ERROR_ALREADY_EXISTS

如果您从逻辑上考虑,可以在进程之间共享文件映射的唯一方法是使用相同的名称,因此让两个不同映射具有相同的名称是没有意义的!

关于c++ - 我可以在具有相同名称的本地命名空间中创建共享内存(使用 CreateFileMapping)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19361804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com