我有一个数据结构如下所示:Ç共享存储器指针映射
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;
}
编辑: 实测值的具有相同的键分配多个共享内存段issue..was因此读/写是重叠...啊...
你期望它显示什么? –
我认为你需要显示内存分配代码(共享和非共享)和打印代码。没有这个,我们猜测你在做什么。 –
我希望它打印99,这是我设置共享内存值。 – user623879