2011-09-05 174 views
0

我有一个数据结构如下所示:Ç共享存储器指针映射

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因此读/写是重叠...啊...

+3

你期望它显示什么? –

+1

我认为你需要显示内存分配代码(共享和非共享)和打印代码。没有这个,我们猜测你在做什么。 –

+0

我希望它打印99,这是我设置共享内存值。 – user623879

回答

1

我得到99显示5次这段代码。我认为唯一的变化是我从结构数组声明的开头(它是struct s1 * s1Arr)删除了关键字struct

编辑:我把struct关键字回来,并得到了相同的结果,所以我不知道为什么我的结果是不同于你的结果。

struct s1 
{ 
    unsigned char * ptr; //points to an element in the shared memory 
}; 

s1 * s1Arr = new s1[5]; 
unsigned char * shm_ptr = new unsigned char[5]; 

for(int i = 0; i < 5; i++) 
{ 
    shm_ptr[i] = 99; 
    s1Arr[i].ptr = &shm_ptr[i]; 
    cout << ((int)*s1Arr[i].ptr) << "\n"; 
} 
+0

是的,我发现这个作品太...我只是愚蠢,并分配多个共享内存段与相同的关键.....大声笑在我身边。 – user623879