【发布时间】:2013-03-14 01:00:16
【问题描述】:
我已经有几个小时的 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 != "无效参数"。 EINVAL = 要创建一个新段并且
size < SHMMIN或size > SHMMAX,或者不创建新段,具有给定键的段存在,但大小大于该段的大小。手册页。检查memory_size参数。 -
@Kira:我得到 errno 22,这是我系统上的 EINVAL。
标签: c linux shared-memory