Search code examples
cmemorypointersshared

Shmget: Invalid argument. Why i get this error?


I get a "shmget: Invalid argument error" while i try to execute this part of code

  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;

there is something wrong here but i can't figure out what. Can you help me?

Thanks, Alex.


Solution

  • From the shmget(1) man page:

    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.

    You should check whether you still have an segment for this key using ipcs and remove it with ipcrm.