7

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.

Sicioldr
  • 543
  • 3
  • 7
  • 13

2 Answers2

14

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.

stacker
  • 68,052
  • 28
  • 140
  • 210
  • can i use a different way to assign a value to key in order to get a bigger space of available memory? – Sicioldr Dec 08 '11 at 10:43
0

In my case, the value of the size_t __size parameter was less than 0. For reference, shmget() is prototyped as:

int shmget(key_t __key, size_t __size, int __shmflg)

Willis Hershey
  • 1,520
  • 4
  • 22
panosK
  • 1
  • 3