int (*open) (resmgr_context_t *ctp,
io_open_t *msg,
RESMGR_HANDLE_T *handle,
void *extra )
Connect
struct _io_connect {
// internal fields (as described above)
uint16_t path_len;
uint8_t extra_type;
uint16_t extra_len;
char path [1];
};
struct _io_connect_link_reply {
uint32_t reserved1;
uint32_t file_type;
uint8_t eflag;
uint8_t reserved2[1];
uint16_t chroot_len;
uint32_t umask;
uint16_t nentries;
uint16_t path_len;
};
struct _io_connect_ftype_reply {
uint16_t status; /* Typically an errno */
uint16_t reserved;
uint32_t file_type; /* _FTYPE_? in sys/ftype.h */
};
typedef union {
struct _io_connect connect;
struct _io_connect_link_reply link_reply;
struct _io_connect_ftype_reply ftype_reply;
} io_open_t;
When you override the default function, QNX recommends that you call iofunc_open_default() (which implements several permission checks depending on the access requested) before you implement any additional functionality. Note that because a file can be opened without read or write permissions, it is not sufficient to check that iofunc_open_default() (or the related iofunc_open()) returns EOK before you implement things like locking (e.g., for a resource that should only be opened by one client at a time).