【发布时间】:2014-04-24 18:27:41
【问题描述】:
我有 2 个应用程序使用共享内存段将数据从写入进程传递到读取进程。在共享内存段的顶部,我想声明一个单独的头结构来包含通用段数据,例如缓冲区计数值、读/写偏移量、pthread 互斥体/条件变量等。头结构不包含任何指针。然后该段的其余部分用于在 2 个进程之间传递的实际数据。
由于共享内存段附加到进程,我确信该段确实对进程有效/可访问。简单地将基段指针转换为头结构类型的指针很容易,并且对于常规数据类型(如整数等)非常有效,但不适用于结构中的非整数数据类型,如 pthread 互斥锁/条件变量,因为它们实际上并没有被声明和分配。
那么,如何声明和分配我的头结构以从我已经分配的共享内存段的特定地址开始?
以下似乎不起作用:
SmHeader header = *((SmHeader *)m_pBaseAddress);
m_pHeader = &header;
其中 SmHeader 是我的标头结构的 typedef,m_pBaseAddress 是附加共享内存段的基地址。
谢谢, -安德烈斯
【问题讨论】:
-
显示更多代码,包括您的
m_pHeader的声明(可能还有包含它的class)。也许你可以声明smHeader &header= *(ShHeader*)m_pBaseAddress;
标签: c++ linux shared-memory