【发布时间】:2014-03-16 20:11:07
【问题描述】:
我的结构看起来像:
typedef struct shared_data_t
{
char *key;
char *message;
}shared_data;
我需要与另一个不相关的进程共享这个结构。我正在使用带有 shm_open()/mmap() 的 POSIX 共享内存来实现这一点。但是,我的目标进程没有获得共享数据并且它与 SIGSEGV 一起死亡,这是显而易见的。如果有人在这方面帮助我,那就太好了,特别是在使用共享内存(使用 shm_open 和 mmap)的两个进程之间共享指针时会发生什么。
对于像这样的结构,
typedef struct shared_data_t
{
char key[8];
char message[32];
}shared_data;
一切正常!
【问题讨论】:
-
这很好用!您只是忘记了这个指针指向共享内存之外,因此另一个进程无法获取数据。但是您也可以在共享内存中分配“密钥”和“消息”。或者真的做一个没有指针的结构!
-
这些指针引用的内存最好也共享,否则这有点毫无意义。
-
使用从共享内存开始的偏移量而不是指针。
-
@Eddy_Em 感谢您的回复。我尝试将结构内容memcpy到共享内存中,但目标进程仍然没有得到它。我是否遗漏了一些非常明显的东西?
标签: c linux memory-management posix shared-memory