我得到一个“shmget:尝试执行此部分代码时出现无效参数错误
int *nFS, *spb, *cell1, shmid;
key_t key = 5768;
//i need a shared memory segment in which i can put 3 ints
if ((shmid = shmget(key, (sizeof(int) * 3), IPC_CREAT | 0666)) < 0 ) {
perror("shmget");
exit(1);
}
if ((spb = (int)shmat(shmid, NULL, 0))== -1 ){
perror("shmat");
exit(1);
}
cell1= spb + 1 ;
nFS= cell1 + 1;
//i try to assign here 7 to nFS
*nFS=7;
这里有点不对劲,但我想不出是什么。你能帮我吗?
谢谢你亚历克斯。
2条答案
按热度按时间np8igboo1#
在shmget(1)手册页中:
EINVAL要创建一个新段,并且size〈SHMMIN或size〉SHMMAX,或者不创建新段,存在具有给定键的段,但size大于该段的大小。
您应该使用
ipcs
检查是否仍有此密钥的段,并使用ipcrm
删除它。nbysray52#
在我的示例中,
size_t __size
参数的值小于0。作为参考,shmget()
的原型为:int shmget(key_t __key, size_t __size, int __shmflg)