У меня есть 2 программы, которым необходимо обмениваться памятью. Назовем одну программу А, другой Б.Ошибка сегментации при доступе к общей памяти в C
Существует структура в этом формате для этой цели:
struct town_t {
int population;
char * name;
}
В программе A, получает данные записываются в общую память, используя ММАП. Это работает для программы A. (Используется strcpy для name
)
Цель программы B - просто прочитать данные. Это тоже работает с mmap. Доступ к полем population
общей памяти работает без проблем. Однако доступ к полю population
дает ошибку сегментации.
Поскольку я использовал strcpy, вся строка должна быть в общей памяти правильно?
Я использую следующие флаги, чтобы получить указатель на общую память, которая не возвращает ошибку.
tptr = (struct town_t *) mmap(0, 1024, PROT_READ, MAP_SHARED, shm_fd, 0)
Как я могу это сделать, чтобы действительно прочитать строку (char *) из программы B?
Использование 'strcpy' не имеет никакого отношения к тому, является ли строка в общей памяти. Какую память указывает «имя» и как вы выделили эту память? – immibis
@immibis Я использую strcpy для указателя общей памяти. Я выделяю char * str = "string". –
Итак, вы делаете 'tptr = mmap (...); char * str = "string"; strcpy (tptr-> name, str); '? – immibis