我有2个应用程序使用共享内存段将数据从写入过程传递到读取过程。在共享内存段的顶部,我想声明一个单独的头结构以包含常规段数据,例如缓冲区计数值,读/写偏移量,pthread互斥量/条件变量等。头结构不包含任何指针。然后剩下的段用于在两个进程之间传递的实际数据。如何在特定地址声明结构?
由于共享内存段连接到进程,因此我确信段确实对进程有效/可访问。只需简单地将基本段指针转换为头结构类型的指针,并且对于常规数据类型(例如ints等)非常适用,但不适用于结构中的非整数数据类型,例如pthread mutex /条件变量,因为它们尚未实际声明和分配。
那么,我该如何声明和分配我的头结构以开始在我已经分配的共享内存段的特定地址?
以下不出现的工作:
SmHeader header = *((SmHeader *)m_pBaseAddress);
m_pHeader = &header;
其中SmHeader是我的报头结构的一个typedef和m_pBaseAddress是连接的共享存储器段的基本地址。
感谢, -Andres
显示更多的代码,包括你的'm_pHeader'声明(也可能是包含它的'''')。也许你可能会声明'smHeader&header = *(ShHeader *)m_pBaseAddress;' –