我有一个类似的结构
struct board{
char name;
int values[37];
}board
想象一个游戏,其中有多个玩家在同一张 table 上玩,他们都在值数组的不同位置下不同的赌注。棋盘的名称是唯一的,玩家进入游戏时指定棋盘名称。如果 2 个或更多玩家输入相同的棋盘名称,他们都会加入同一游戏。
我需要将此结构放入共享内存并访问/修改“值”的内容
同时来自不同的进程(信号量不是问题)。我设法将结构复制到一 block 共享内存中,但我不知道如何访问名称以查看板是否已经存在以及类似的事情。
这是一个学校项目,我有点绝望......请帮助和感谢。顺便说一句,共享内存我想要引用 POSIX 操作系统
最佳答案
POSIX 共享内存函数在编写时已经考虑到了这种排序工作:
int shm_open(const char *name, int oflag, mode_t mode);
如果您使用"/onica_game_<name>"
为您*name
参数,您可以轻松指定要为共享游戏附加哪些共享内存段。 (顺便说一句,单个 char
对于游戏名称来说有点限制。您可能需要使用 char name[32];
或更大的名称,以便人们有机会为他们的游戏命名更有意义的名称。)
我建议在名称前加上 onica_game_
前缀因为 POSIX 共享内存段的命名空间是系统范围的。
关于共享内存中的c结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073704/