【发布时间】:2017-05-02 17:27:55
【问题描述】:
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 的函数,其中函数将大小作为参数。我一直收到 Invalid argument 错误,除了 size = 1。当我传递大小不是 1 时,我得到错误,但是当我检查 ipcs -m 时创建了内存段,它的大小为 1。怎么办我摆脱了这个错误?
【问题讨论】:
-
key的值是多少?即你确定ftok没有失败? -
你的代码到底是什么。我刚刚使用了大小为 25 的代码,它运行良好。
-
POSIX
shmget()记录了 EINVAL 的两种情况: [EINVAL] 将创建一个共享内存段,并且 size 的值小于系统规定的最小值或大于系统规定的最小值-imposed maximum 和 [EINVAL] 不创建共享内存段,并且为 key 存在共享内存段,但与其关联的段的大小小于 size。 你有调查了您的内核配置中的限制是什么?您是否创建了大小为 1 的细分,但现在无法增长它? -
只是出于好奇,
id的值是多少。我希望它不是零。 -
这不可能是您的全部功能,因为
int shmid缺少尾随分号。