【发布时间】:2017-06-30 09:32:12
【问题描述】:
我已阅读有关Memory-Mapped Files 的文章和有关CreateFileMapping 的示例。
我的问题是:我可以使用内存映射文件在两个进程之间传递指向结构或对象的指针吗?
由于有一些答案是可能的,这里是我想传递的结构:
// First Process
struct OtherStruct{};
struct MyStruct
{
unsigned long handleObject;
unsigned long *phandleObject;
OtherStruct someData;
OtherStruct *pData;
}
MyStruct dataSend = { ... };
WriteToMappedFile(data);
// Second Process
MyStruct dataReceived = ReadFromMappedFile()
【问题讨论】:
-
您必须将结构的内容
memcpy映射到内存映射文件。 -
澄清你的问题:你想知道你是否可以通过内存映射文件(你肯定可以)传递一个指针,或者你是否能够从其他进程访问结构(只有在结构也位于内存映射区域内时才能这样做)。在这种情况下,因为每个进程都有自己的虚拟内存布局,您将不得不使用相对于内存映射文件的寻址。有关详细信息,请参阅下面的答案。
-
感谢大家。可以举几个例子吗?
-
我认为你需要更具体一点,你想从一个进程传递到另一个进程。您是否使用使用指针来引用不同节点的数据结构(如链表、树、图)?或者是否可以传递结构 by value 而不是传递指针?这会大大简化事情。
标签: c++ linux windows pointers ipc