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