访问C中共享内存时的分割故障



我有2个需要共享内存的程序。让我们称呼一个程序A,另一个程序B。

为此目的,有一个格式的结构:

struct town_t {
    int population;
    char * name; 
}

在程序A中,数据使用MMAP写入共享内存。这适用于程序A。(它使用strcpy用于name

程序B的目的是简单地读取数据。这也可以与MMAP一起使用。访问共享内存的population字段毫无问题。但是,访问population字段给出了分段故障。

既然我使用了strcpy,则整个字符串应该在共享内存中?

我使用以下标志获取指向共享内存的指针,该指针返回没有错误。

tptr = (struct town_t *) mmap(0, 1024, PROT_READ, MAP_SHARED, shm_fd, 0)

我该如何做到这一点,以便我可以实际读取b?

的字符串(char*)

将指针放入共享内存是没有意义的。指针在特定过程的地址空间内提供了一个位置。它对另一个地址空间的另一个过程没有意义。(除了一些复杂的例外,例如通过运行相同可执行文件访问的相关进程访问的fork的指针分配了内存的指针。)

如果需要,您可以将字符串数据本身存储在共享内存中。例如,这将有效:

#define MAX_NAME_SIZE 100
struct town_t
{
    int population;
    char name[MAX_NAME_SIZE];
};

最新更新