iofunc_mmap()

Handle an _IO_MMAP message

Synopsis:

#include <sys/iofunc.h>

int iofunc_mmap ( resmgr_context_t * hdr,
                  io_mmap_t * msg,
                  iofunc_ocb_t * ocb,
                  iofunc_attr_t * attr );

Arguments:

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.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

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.

io_mmap_t structure

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>:
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.

Returns:

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.

Classification:

QNX Neutrino

Safety:
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

See also:

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