gpt4 book ai didi

c - 在 C 中访问共享内存时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:47 27 4
gpt4 key购买 nike

我有 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*)?

最佳答案

将指针放在共享内存中毫无意义。指针给出了特定进程地址空间内的位置。它对具有另一个地址空间的另一个进程没有任何意义。 (有一些复杂的异常(exception),例如指向调用 fork 之前分配的内存的指针,这些内存由运行相同可执行文件的相关进程访问。)

如果愿意,您可以将字符串数据本身存储在共享内存中。例如,这将起作用:

#define MAX_NAME_SIZE 100

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

关于c - 在 C 中访问共享内存时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41029202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com