【发布时间】:2011-11-10 00:40:05
【问题描述】:
我有一个类似
的结构struct board{
char name;
int values[37];
}board
想象一个游戏,其中有几个玩家在一张桌子上玩,他们都在 values 数组的不同位置下不同的赌注。棋盘的名称是唯一的,玩家进入游戏时指定棋盘的名称。如果 2 位或更多玩家输入相同的棋盘名称,他们都会加入同一个游戏。
我需要将此结构放入共享内存并访问/修改“值”的内容
同时来自不同的进程(信号量不是问题)。我设法将结构复制到一块共享内存中,但我不知道如何访问名称以查看板是否已经存在以及类似的东西。
这是一个学校项目,我有点绝望....请帮助和感谢。顺便说一下,共享内存我要引用POSIX os
【问题讨论】:
-
C 中没有“共享内存”之类的东西。如果您指的是任何特定于平台的概念,请明确指定平台(例如“这是给我的 TI-95 计算器”)。
-
首先,名称只是一个字符。它应该是指针或数组。为什么不将整个结构复制到共享内存中呢?然后您可以像访问任何其他结构一样访问它。另外,为什么要共享内存?每个玩家是在计算机上启动自己的程序,还是通过某种网络连接?
-
你的 shm 库不支持命名内存区域吗?如果是这样,您可以将每个板映射到一个内存区域。要么,要么使用红黑树来跟踪
(name, (struct board *))对。另外,你的意思是char *name? (固定大小的char数组更适合 shm,因为它更容易复制和使用指针。