子进程更新共享 mmap 内存,但父进程没有更改
Child process updates shared mmap memory but no change in parent process
我正在尝试将结构保存在 mmap 创建的共享内存中,如下面的代码所示:
问题是,子进程似乎正在更新共享内存中的结构,但是当父进程尝试读取它时,它会抛出错误。
struct name{
char * name;
};
int main(int argc, char ** argv){
struct name * s_memory = mmap(NULL, sizeof(struct name), PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
pid_t p = fork();
if(p == 0) {
printf("In Child Processn");
s_memory->name = strdup("test name");
printf("Child Process name: %s n", s_memory->name); // Print - test name ok!!
puts("exit child process");
exit(1);
} else {
sleep(1);
printf("Parent Process name: %s n", s_memory->name); // SEGV !! - Not Updated
}
exit(0);
}
- 这里有什么问题?
为什么删除
strdup
并执行以下操作有效:s_memory->name = "test name" // with strdup throws SEGV but works without strdup. why?
谢谢
发生这种情况是因为您只将指向字符串的指针存储在共享内存中,字符串本身由strdup
通过malloc
分配,它位于程序堆中,即在共享内存区域之外。
您应该将字符串本身存储在共享内存中,例如:
struct name {
char name[1024];
};
// . . .
strncpy(s_memory.name, "test name", sizeof(s_memory.name));
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- Directx 12 :在两个进程之间共享图形内存
- 子进程更新共享 mmap 内存,但父进程没有更改
- 如何在进程之间共享大量数据而不重复?(国际刑罚委员会)
- 提升进程间共享内存open_or_create每次都会引发异常
- 提升进程间共享内存删除、权限和输出文件
- 加速进程间:管理共享内存错误
- 使用互斥锁和条件变量增强跨内存的进程间共享向量
- std::unordered_map 在共享内存中使用 boost:::进程间分配器 - 缺点?
- 如何将我的 cli 信息(变量等)共享到子进程,这是一个 bash shell 脚本
- 提升进程间:在循环中分配共享内存
- 动态链接库 (.dll) 中的对象是否跨进程共享
- SYSTEM进程是否可以与非SYSTEM进程共享数据
- POSIX 跨进程共享内存同步 C++/C++11
- 可以跨进程共享的C++容器
- 两个进程共享同一个pcap文件
- ZeroMQ与分叉服务器中的所有子进程共享上下文
- Linux 信号量,跨分叉>exec'd 进程共享?
- C++多进程共享内存实现
- 使用boost::interprocess::shared_ptr实现跨进程共享生命周期