共享内存中的c结构

标签 c memory structure shared

我有一个类似的结构

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/

相关文章:

c - 如何更改串行传输数据的字节序?

c++ - 64 位/32 位 IPC 的 POSIX 信号量的替代方案?

c++ - OpenGL 4.3 程序 Ubuntu 14.04 x64 中时间变量冲突的问题

性能调整 Hive 查询

c - 动态结构体数组

c - 使用移位运算符拆分大十进制数

c - 小端到大端

对结构在内存中的位置感到困惑

c++ - 两个头文件和两个 .CPP 文件

c - 使用 bfd 数据结构的目标文件中的节数