Multiple threads within a process share the memory of that process. To share memory between processes, you must first create a shared-memory region and then map that region into your process's address space. Shared-memory regions are created and manipulated using the following calls:
Function | Description | Classification |
---|---|---|
shm_open() | Open (or create) a shared-memory region. | POSIX |
close() | Close a shared-memory region. | POSIX |
mmap() | Map a shared-memory region into a process's address space. | POSIX |
munmap() | Unmap a shared-memory region from a process's address space. | POSIX |
munmap_flags() | Unmap previously mapped addresses, exercising more control than possible with munmap() | QNX Neutrino |
mprotect() | Change protections on a shared-memory region. | POSIX |
msync() | Synchronize memory with physical storage. | POSIX |
shm_ctl(), shm_ctl_special() | Give special attributes to a shared-memory object. | QNX Neutrino |
shm_unlink() | Remove a shared-memory region. | POSIX |
POSIX shared memory is implemented in the QNX Neutrino RTOS via the process manager (procnto). The above calls are implemented as messages to procnto (see the Process Manager chapter in this book).
The shm_open() function takes the same arguments as open() and returns a file descriptor to the object. As with a regular file, this function lets you create a new shared-memory object or open an existing shared-memory object.
When a new shared-memory object is created, the size of the object is set to zero. To set the size, you use ftruncate()—the very same function used to set the size of a file—or shm_ctl().