У меня есть структура данных следующим образом:
struct s1{
unsigned char* ptr;//points to an element in the shared memory
};
struct s1* s1Arr;
И я выделил блок совместно используемой памяти, и указатель на него:
unsigned char* shm_ptr.
У меня есть массив s1 с тем же количеством элементов, что и у выделенных мною элементов shm_ptr.
//point all the ptr elements of the struct to the shared memory elements(parallel array)
for(i = 0; i < count; i++)
{
shm_ptr[i] = 99;
s1Arr[i].ptr = &shm_ptr[i];
printf("val=%d\n". *s1Arr[i].ptr);
}
Когда я иду на печать * s1Arr [i] .ptr, он печатает только i, где i равно 0, 1 ... в то время как он должен печатать 99.
Есть мысли о том, что я делаю не так?
Я знаю, что разделяемая память работает, поскольку я пытался получить к ней доступ из другого процесса.
void* allocArray_shared(int elementCount, int elementByteSize, int* shmid, key_t key)
{
printf("allocshared errno=%d\n", errno);
//size of entire array(cols*rows* byte size + row pointers)
int array_size = elementByteSize * elementCount;
//Allocate enough space for all elements + row pointers
*shmid = shmget(key, array_size, 0666 | IPC_CREAT);
char * arr = (char*)shmat(*shmid, NULL, 0);
if(!arr) return NULL;
printf("allocshared end errno=%d\n", errno);
//Return the pointer to the first row pointer
return (void*)arr;
}
EDIT:
Обнаружил проблему .. выделял несколько сегментов разделяемой памяти с одним и тем же ключом, и поэтому операции чтения / записи перекрывались ... тьфу ...