首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shmget()给出EINVAL错误

shmget()给出EINVAL错误
EN

Stack Overflow用户
提问于 2013-03-14 01:00:16
回答 1查看 7.8K关注 0票数 1

我对shmget有几个小时的问题了,现在我似乎搞不清楚了。每次我尝试调用got shmget()时,它总是返回一个EINVAL:“无效参数”错误。

守则的重要部分如下:

代码语言:javascript
复制
key_t generate_ipc_key()
{
    key_t ipc_key = ftok(__FILE__, KEY);
    if(ipc_key < 0) {
        perror("Failed to Generate IPC Key");
        exit(IPC_FAILURE);
    }

     return ipc_key;
}

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

    return shm_key;
}

该函数的调用方式如下:

代码语言:javascript
复制
shm_key = shared_memory_create(sizeof(data_t));

其中data_t是一个结构:

代码语言:javascript
复制
typedef struct {
    int hCount;
    int oCount;
    int bCount;
} data_t;

此外,如果它有助于共享内存的值,则如下所示:

代码语言:javascript
复制
kernal.shmmax = 33554432
kernal.shmall = 2097152
kernal.shmmni = 4096

我对C很陌生,所以我确信这是很简单的事情,我错过了,但是我似乎搞不清楚。任何帮助都是非常感谢的!

我不知道它到底是什么,ipcs没有显示共享段,我重新启动,现在它开始工作了。

EN

回答 1

Stack Overflow用户

发布于 2013-03-14 01:14:41

手册页上写着:

EINVAL一个新段将被创建,大小< SHMMIN或size > SHMMAX,或者不创建新段,存在一个具有给定键的段,但大小大于该段的大小。

所以,检查其中任何一个是否适用。您可以运行ipcs工具来列出现有的共享内存段,并查看您的程序是否与其中的任何部分发生冲突。注意,共享内存段在进程结束后仍然存在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15399369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档