Hi
I need you guys help. I am new to use this shared memory concept in pro*C/C. I have two sample programs just to check the concept and to implement, but I am getting an error like this " shmget: Invalid argument " when I execute both the sample programs simultaneously. I have the programs as 'server' and 'client' here. pls let me know whether there is anything wrong or do I need any superuser/admin priveleges to implement this or do I need to know any thing regarding the primary/virtual memory segments of the server. I am working on Solaris 7. and the programs are..

-----------------------------------
server

#include
#include
#include
#include

#define SHMSZ 27

main()
{
char c;
int shmid;
key_t key;
char *shm, *s;


/* shared memory segment "5678". */

key = 5678;

/* Create the segment. */

if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0)
{
perror("shmget");
exit(1);
}

/*
* Now attach the segment to our data space.
*/
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}

/*
* Now put some things into the memory for the
* other process to read.
*/
s = shm;
for (c = 'a'; c <= 'z'; c++)
{
*s++ = c;
printf(" c : %c, ",c);
}
*s = NULL;

/*
* Finally, we wait until the other process
* changes the first character of our memory
* to '*', indicating that it has read what
* we put there.
*/
while (*shm != '*')
sleep(1);

exit(0);
}
--------------------------------------
client

/*
* client program to demonstrate shared memory.
*/
#include
#include
#include
#include

#define SHMSZ 27

main()
{
int shmid;
key_t key;
char *shm, *s;

/* We need to get the segment named "5678", created by the server. */

key = 5678;

/* Locate the segment. */

if ((shmid = shmget(key, SHMSZ, 0666)) < 0) {
perror("shmget");
exit(1);
}

/* Now we attach the segment to our data space. */

if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}

/* Now read what the server put in the memory. */

for (s = shm; *s != NULL; s++)
{
putchar(*s);
printf(" s: %c, ",s);
}
putchar('\n');

/*
* Finally, change the first character of the
* segment to '*', indicating we have read
* the segment.
*/
*shm = '*';

exit(0);
}
----------------------------------------

Based on this concept I will be putting around 2 million records in the memory, which will be shared by 20 different programs which will be executed at the same time. pls help in implementing this concept. or if you have any stuff/URL's on this pls mail me.