Using C, I'm trying to set up shared memory. My code looks like:
key_t key = ftok("SomeString", 1);
static int *sharedval;
int shmid = shmget(key, sizeof(int), S_IRUSR | S_IWUSR); // less permissions
sharedval = (int *) shmat(shmid, NULL, 0);
*sharedval = 0;
However the second I run that last line, I get a segmentation fault. When debugging, I can print "sharedval" and I get a memory address, presumably the place in memory I got. So I would assume all I have to do is use *sharedval
to assess it, but apparently not. How am I supposed to read from the shared memory? A push in the right direction would be wonderful. Thanks!
Edit:
another.anon.coward's output:
$ ./a.out
ftok: No such file or directory
shmget: No such file or directory
Trying shmget with IPC_CREAT
shmget success
shmat success
Segmentation fault: 11
The problem in your case could be that there is no associated memory segment for the given key. You need to create a memory segment by passing
IPC_CREAT
flag inshmget
in that case. Please useperror
to check your error message. Use can try the following code