【发布时间】:2020-06-03 13:49:17
【问题描述】:
我正在尝试将结构保存在由 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 Process\n");
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?
谢谢
【问题讨论】:
标签: c++ c ipc shared-memory mmap