这里是C。
我有一个这样的结构
typedef struct {
char* name
} info;
并存储该结构的数组(大小为10)(在另一个名为
table
)在使用shm\U open调用的共享内存对象中:
int fd = shm_open("someName", O_CREAT | O_EXCL | O_RDWR, S_IRWXU);
if (fd < 0) {
fd = shm_open("someName", O_CREAT | O_RDWR, S_IRWXU);
if (fd < 0) {
printf("ERROR: Could not open shared memory space\n");
return -1;
}
}
(*tables) = mmap(NULL, sizeof(table), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
ftruncate(fd, sizeof(table));
close(fd);
然而,我遇到的问题是,稍后通过代码会出现这样的场景:
如果进程B运行它并放入一些文本,则在
name
元素的字段
桌子
数组,进程A无权访问该
char*
.
它看到的只是一个内存地址,而不是
字符*
而不是它自己写内容。然而,我还要指出,如果我替换
字符*
具有固定大小
char[]
说
char name[20]
而不是
char *name
,则不会发生此问题。
我想知道是否有办法解决这个问题,如果没有,为什么会这样?
非常感谢。