我有一个结构定义如下
struct s
{
int a;
};
struct s s1;
struct s s2;
我需要将两个结构实例都推送到共享内存。
char *data=(char *)shmat(m_sharedMemoryId,NULL,0);
memcpy(data,&s1,sizeof struct s);
我做了第一个结构实例。
如何处理第二个实例?这可能在共享内存中吗?
Plaftform:UNIX
答案 0 :(得分:2)
shmat
调用只获取一个指针,该指针指向之前应该使用shmget
创建的共享内存段。你有2种方法可以解决这个问题:
分配一个段,该段将包含所有结构的数组,然后将结构复制到此数组:
m_sharedMemoryId = shmget(key, sizeof(struct s) * nb, perm_flag);
struct s* data = shmat(m_sharedMemoryId,NULL,0);
然后你在数组中复制一个你想要的结构,这里位于i:
memcpy(data + i,&s1,sizeof(struct s));
如果你有很多小结构,这主要是用来
为每个结构分配不同的段
m_sharedMemoryId = shmget(key, sizeof(struct s), perm_flag);
struct s* data = shmat(m_sharedMemoryId,NULL,0);
memcpy(data,&s1,sizeof(struct s));
并重复每个结构的分配。如果您希望能够单独解除分配的几个大结构,则使用此方法