在c中使用带结构的Shmget()

时间:2013-03-20 12:36:56

标签: c shared-memory

我在OSx上使用C并使用shmget()来获取在两个不同程序之间使用的内存 具有2个int值的结构 这是否意味着如果我想要一个27的大小而不是它必须是54以及如何使用用于结构的指针或任何帮助将非常感激

2 个答案:

答案 0 :(得分:1)

不,你需要在struct上使用sizeof。您无法保证实现如何填充结构中的值,因此您不会假设它们的大小。此外,如果由于向结构添加成员而导致大小稍后更改,则内存分配仍将正常工作。

然后使用sizeof中的值乘以您要在共享内存区域中使用的结构的实例数。

答案 1 :(得分:0)

假设您有这样的结构:

typedef struct {
    int aCount;
    int bCount;
    int cCount;
} data_t;

以下函数将为指定大小创建共享内存。

int shared_memory_create(size_t memory_size)
{
    int shm_key = shmget(IPC_PRIVATE, memory_size, IPC_CREAT | IPC_EXCL | 0666);
    if(shm_key < 0) {
        perror("Failed to Create Shared Memory Key");
        exit(0);
    }

    return shm_key;
}

如果要创建共享内存以容纳27个元素,请调用函数 shared_memory_create ,如下所示:

shm_key = shared_memory_create(27*sizeof(data_t));