Sample code for handling _IO_READ messages in pread*()
QNX SDP8.0Writing a Resource ManagerDeveloper
The following sample code demonstrates how to handle
_IO_READ for the case where the client calls one
of the pread*() functions.
/* we are defining io_pread_t here to make the code below simple */
typedef struct {
struct _io_read read;
struct _xtype_offset offset;
} io_pread_t;
int io_read (resmgr_context_t *ctp, io_read_t *msg, RESMGR_OCB_T *ocb)
{
off64_t offset; /* where to read from */
int status;
if ((status = iofunc_read_verify(ctp, msg, ocb, NULL)) != EOK) {
return(status);
}
switch(msg->i.xtype & _IO_XTYPE_MASK) {
case _IO_XTYPE_NONE:
offset = ocb->offset;
break;
case _IO_XTYPE_OFFSET:
/*
* io_pread_t is defined above.
* Client is doing a one-shot read to this offset by
* calling one of the pread*() functions
*/
offset = ((io_pread_t *) msg)->offset.offset;
break;
default:
return(ENOSYS);
}
...
}
Page updated: