【发布时间】:2016-12-07 23:26:53
【问题描述】:
我有 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*)?
【问题讨论】:
-
使用
strcpy与字符串是否在共享内存无关。name指向什么内存,您是如何分配该内存的? -
@immibis 我正在使用 strcpy 指向共享内存指针。我用 char * str = "string" 分配。
-
所以
tptr = mmap(...); char *str = "string"; strcpy(tptr->name, str);? -
@immibis 这行不通,因为
tptr->name没有特定的价值,所以你将垃圾(可能为NULL)传递给strcpy。 -
@DavidSchwartz 我知道为什么它不起作用。我问提问者是否是提问者写的。
标签: c memory struct shared mmap