gpt4 book ai didi

c - shmget() 给出 EINVAL 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:30 25 4
gpt4 key购买 nike

几个小时以来我一直遇到 shmget 的问题,现在我似乎无法弄清楚。每次我尝试调用 shmget() 时,它总是返回 EINVAL: "Invalid Argument"错误。

代码的重要部分如下:

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;
}

正在调用该函数:

shm_key = shared_memory_create(sizeof(data_t));

其中 data_t 是一个结构:

typedef struct {
int hCount;
int oCount;
int bCount;
} data_t;

此外,如果有帮助,共享内存的值是:

kernal.shmmax = 33554432
kernal.shmall = 2097152
kernal.shmmni = 4096

我是 C 语言的新手,所以我确信它是我遗漏的一些简单的东西,但我似乎无法弄明白。感谢您的帮助!

我不确定它到底是什么,ipcs 显示没有共享段,我重新启动,现在它可以工作了。

最佳答案

手册页说:

EINVAL A new segment was to be created and size < SHMMIN or 
size > SHMMAX, or no new segment was to be created, a
segment with given key existed, but size is greater than
the size of that segment.

因此,请检查这些是否适用。您可以运行 ipcs 工具来列出现有的共享内存段,并查看您的程序是否与这些冲突。请注意,共享内存段在您的进程结束后仍然存在。

关于c - shmget() 给出 EINVAL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com