у нас есть пара приложений на C, которые общаются, используя общую память.Первое приложение добавляет сообщение, а второе всегда читает из общей памяти.
struct messagestruct {
unsigned int sessionid;
uint8_t message[16]; //unsigned 8bit int
}__attribute__ ((__packed__));
нам нужно 3 сеанса (для 3 пользователей).определяемый размер разделяемой памяти как
#define SHARED_SIZE ( 3 * sizeof(messagestruct)) + sizeof(int)
мы получаем доступ к разделяемой памяти как
int sesskey = ftok("/path/to/a/file", "B");
int shmemoryid = shmget(sesskey, SHARED_SIZE, 0666 | IPC_CREAT);
во время копирования структур в разделяемую память, ошибка отчетов valgrind (недопустимый размер записи 1)
void *shmaddr = shmat(shmemoryid, NULL, 0);
int *sessnum;
struct messagestruct *msgstruct;
sessnum = (int *)shmaddr;
msgstruct = (struct messagestruct*)((void*) shmaddr + sizeof(int));
memcpy(shmaddr, currentsessionsstruct, SHARED_SIZE); //-->valgrind error invalid write size 1
спасибо за любую полезную информацию.