1 /* Function CreateShm: Create a shared memory segment mapping it */
2 void * CreateShm(char * shm_name, off_t shm_size, mode_t perm, int fill)
7 /* first open the object, creating it if not existent */
8 flag = O_CREAT|O_EXCL|O_RDWR;
9 fd = shm_open(shm_name, flag, perm); /* get object file descriptor */
13 /* set the object size */
14 if (ftruncate(fd, shm_size)) {
17 /* map it in the process address space */
18 shm_ptr = mmap(NULL, shm_size, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
19 if (shm_ptr == MAP_FAILED) {
22 memset((void *) shm_ptr, fill, shm_size); /* fill segment */
25 /* Function FindShm: Find a POSIX shared memory segment */
26 void * FindShm(char * shm_name, off_t shm_size)
29 int fd; /* ID of the IPC shared memory segment */
30 /* find shared memory ID */
31 if ((fd = shm_open(shm_name, O_RDWR|O_EXCL, 0)) < 0) {
34 /* take the pointer to it */
35 shm_ptr = mmap(NULL, shm_size, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
36 if (shm_ptr == MAP_FAILED) {
41 /* Function RemoveShm: Remove a POSIX shared memory segment */
42 int RemoveShm(char * shm_name)
44 return shm_unlink(shm_name);