在共享内存中,可以使用连接到它的指针将数据写入其中的任何位置 例如,如果 id 是共享内存id(大小为1024B)并且附加了char *类型,则如下所示
char* CharPointertoSm;
CharPointertoSm=(char*)shmat(id, 0, 0);
然后可以使用指针 CharPointertoSm 在共享内存上的任何位置读取或写入数据 比如,在索引10上写,我们
CharPointertoSm[10]='a';
我的问题是我们如何使用相同的方案将多个信号量附加到共享内存?要附加一个信号量,我们
sem_t * semDecide = NULL;
if ((semDecide = (sem_t *)shmat(id, 0, 0)) == (sem_t *) -1)
{
printf("shmat-sem\r\n");
shmctl(id,IPC_RMID, 0);
exit(1);
}
并且此信号量(semDecide)将占用共享内存的前32个字节,我们如何将下一个32位分配给另一个信号量?因为使用与上面相同的另一个信号量作为
sem_t * semDecide2 = NULL;
if ((semDecide2 = (sem_t *)shmat(id, 0, 0)) == (sem_t *) -1)
{
printf("shmat-sem\r\n");
shmctl(id,IPC_RMID, 0);
exit(1);
}
不起作用(可能因为它再次使用前32个字节,之前已分配给第一个信号量(i-e到semDecide)
如何使用shmat将第二个信号量附加到第一个信号量旁边?