Creating a shared memory object
QNX SDP8.0System ArchitectureDeveloperUser
All 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 OS |
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 OS |
shm_unlink() | Remove a shared memory region. | POSIX |
POSIX shared memory is implemented in the QNX OS via the
process manager (procnto). The above calls are
implemented as messages to procnto (see the Process Manager
chapter).
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.
Note:
You must open the file descriptor for reading; if you want to write in
the memory object, you also need write access, unless you specify a
private (MAP_PRIVATE) mapping.
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().
Shared memory objects that are populated with shm_ctl() are implicitly locked.
Page updated: