C语言 Shmget:无效参数.为什么我得到这个错误?

laik7k3q  于 2022-12-17  发布在  其他
关注(0)|答案(2)|浏览(258)

我得到一个“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;

这里有点不对劲,但我想不出是什么。你能帮我吗?
谢谢你亚历克斯。

np8igboo

np8igboo1#

在shmget(1)手册页中:
EINVAL要创建一个新段,并且size〈SHMMIN或size〉SHMMAX,或者不创建新段,存在具有给定键的段,但size大于该段的大小。
您应该使用ipcs检查是否仍有此密钥的段,并使用ipcrm删除它。

nbysray5

nbysray52#

在我的示例中,size_t __size参数的值小于0。作为参考,shmget()的原型为:
int shmget(key_t __key, size_t __size, int __shmflg)

相关问题