我已经通过shmget创建了一个linux共享内存,我在第一个内存地址上创建了一个这样的全局管理结构,
typedef struct{
mini_kv_key *slots;
unsigned int slots_mask;
unsigned int slots_num;
mini_cache_segment **segments;
unsigned int segments_num;
unsigned int segments_mask;
} mini_cache_globals;
我尝试使用
mini_cache_globals mini_cache = shmat(0, NULL, 0);
获取此管理结构,但我发现当我使用
时mini_cache->slots[index];
获取mini_kv_key将返回段故障,访问
也是如此mini_cache->segments_num[index];
我很抱歉我的英语很差,代码是here
答案 0 :(得分:1)
您正在尝试访问仅在其他进程中有效的指针(进程实际创建的结构和设置指针。)保存在共享结构中的任何指针在任何其他进程中都无效。为了实现您的目标,您应该保存需要在共享内存中共享的所有数据,并存储相对偏移而不是指针。