Handle an _IO_MMAP message
#include <sys/iofunc.h>
int iofunc_mmap ( resmgr_context_t * hdr,
io_mmap_t * msg,
iofunc_ocb_t * ocb,
iofunc_attr_t * attr );
- hdr
- A pointer to a
resmgr_context_t
structure that the resource-manager library uses to pass context information
between functions.
- msg
- A pointer to the
io_mmap_t
structure that contains
the message that the resource manager received; see below.
- ocb
- A pointer to the
iofunc_ocb_t
structure for the Open Control Block that was created when the
client opened the resource.
- attr
- A pointer to the
iofunc_attr_t
structure that describes the characteristics of the device that's
associated with your resource manager.
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
The iofunc_mmap() helper function
provides functionality for the _IO_MMAP message.
The _IO_MMAP message is an outcall from the Memory Manager
(a part of the QNX Neutrino microkernel's
procnto).
Note that if the Process Manager is to be able to execute from this resource,
then you must use the iofunc_mmap() function.
The io_mmap_t structure holds the _IO_MMAP
message received by the resource manager:
struct _io_mmap {
uint16_t type;
uint16_t combine_len;
uint32_t prot;
uint64_t offset;
struct _msg_info info;
uint32_t zero[6];
};
struct _io_mmap_reply {
uint32_t zero;
uint32_t flags;
uint64_t offset;
int32_t coid;
int32_t fd;
};
typedef union {
struct _io_mmap i;
struct _io_mmap_reply o;
} io_mmap_t;
The I/O message structures are unions of an input message (coming to the
resource manager) and an output or reply message (going back to the client).
The i member is a structure of type _io_mmap that
contains the following members:
- type
- _IO_MMAP.
- combine_len
- If the message is a combine message, _IO_COMBINE_FLAG
is set in this member.
For more information, see
Combine Messages
chapter of Writing a Resource Manager.
- prot
- The access capabilities that the client wants to use for the memory
region being mapped.
This can be a combination of at least the following protection bits, as
defined in <sys/mman.h>:
- PROT_EXEC — the region can be executed.
- PROT_NOCACHE — disable caching of the region
(e.g. so it can be used to access dual-ported memory).
- PROT_NONE — the region can't be accessed.
- PROT_READ — the region can be read.
- PROT_WRITE — the region can be written.
- offset
- The offset into shared memory of the location that the client wants to
start mapping.
- info
- A pointer to a
_msg_info,
structure that contains
information about the message received by the resource manager.
The o member of the io_mmap_t structure is a
structure of type _io_mmap_reply that contains the following
members:
- flags
- Reserved for future use.
- offset
- Reserved for future use.
- coid
- A file descriptor that the process manager can use to access the
mapped file.
- fd
- Reserved for future use.
- A nonpositive value (i.e. ≤ 0)
- Successful completion.
- EROFS
- An attempt to memory map (mmap) a read-only file, using the
PROT_WRITE page protection mode.
- EACCES
- The client doesn't have the appropriate permissions.
- ENOMEM
- Insufficient memory exists to allocate internal resources
required to effect the mapping.
QNX Neutrino
Safety: | |
Cancellation point |
No |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |
iofunc_attr_t,
iofunc_mmap_default(),
iofunc_ocb_t,
_msg_info,
resmgr_context_t
Writing a Resource Manager
Resource Managers
chapter of Getting Started with QNX Neutrino