我现在已经有几个小时的shmget问题了,我似乎无法弄明白。每当我尝试拨打电话shmget()
时,它总是返回EINVAL:“无效的参数”错误。
代码的重要部分如下:
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没有显示共享段,我重新启动,现在它可以工作。
答案 0 :(得分:1)
手册页说:
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
工具列出现有的共享内存段,并查看您的程序是否与其中任何一个冲突。请注意,在您的流程结束后,共享内存段仍然存在。