C linux shmget无效的参数

时间:2017-05-02 17:27:56

标签: c linux memory shared

int shmCreate(int id, int size)
{
    int shmid
    key_t key;

    if ((key = ftok(".", id)) == -1) {
        perror("ftok");
        exit(1);
    }

    if ((shmid = shmget(key, size, IPC_CREAT | 0666)) == -1) {
        perror("shmget");
        exit(1);
    }

    return shmid;
}

我正在尝试编写使用shmget的函数,其中函数将size作为参数。我一直得到无效参数错误,除了size = 1.当我传递大小不是1时我得到错误,但是当我检查ipcs -m时创建了内存段,并且它的大小为1.如何做我摆脱了这个错误?

1 个答案:

答案 0 :(得分:0)

根据shmget(2)的手册页:

  

EINVAL存在给定键的段,但大小大于   该段的大小。

您无法附加已存在且尺寸较大的细分。因此,您需要先将其删除或使用其他密钥。