Here is a code fragment with pointers on how to use shared memory. The same methods are applicable to other resources.
In a typical access sequence the creator allocates a new instance
of the resource with the get
system call using the IPC_CREAT
flag.
creator process:
#include <sys/shm.h> int id; key_t key; char proc_id = 'C'; int size = 0x5000; /* 20 K */ int flags = 0664 | IPC_CREAT; /* read-only for others */ key = ftok ("~creator/ipckey", proc_id); id = shmget (key, size, flags); exit (0); /* quit leaving resource allocated */
Users then gain access to the resource using the same key.
Client process:
#include <sys/shm.h> char *shmaddr; int id; key_t key; char proc_id = 'C'; key = ftok ("~creator/ipckey", proc_id); id = shmget (key, 0, 004); /* default size */ if (id == -1) perror ("shmget ..."); shmaddr = shmat (id, 0, SHM_RDONLY); /* attach segment for reading */ if (shmaddr == (char *) -1) perror ("shmat ..."); local_var = *(shmaddr + 3); /* read segment etc. */ shmdt (shmaddr); /* detach segment */
When the resource is no longer needed the creator should remove it.
Creator/owner process 2:
key = ftok ("~creator/ipckey", proc_id) id = shmget (key, 0, 0); shmctl (id, IPC_RMID, NULL);