iofunc_open_default()
Default handler for _IO_CONNECT messages
Synopsis:
#include <sys/iofunc.h>
int iofunc_open_default( resmgr_context_t *ctp,
io_open_t *msg,
iofunc_attr_t *attr,
void *extra );
Arguments:
- ctp
- 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_open_t structure that contains the message that the resource manager received. For more information, see the documentation for iofunc_open().
- attr
- A pointer to the iofunc_attr_t structure that defines the characteristics of the device that the resource manager is controlling.
- extra
- Extra information from the library. If you're calling iofunc_open_default() from a resource manager's open() function (see resmgr_connect_funcs_t), simply pass the extra argument that's passed to open().
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The iofunc_open_default() function implements the default actions for the _IO_CONNECT message in a resource manager. This function calls:
- iofunc_open() to check the client's open mode against the resources attributes to see if the client can open the resource in that mode
- iofunc_ocb_calloc() to allocate an Open Control Block (OCB)
- iofunc_ocb_attach() to initialize the OCB. This function calls resmgr_open_bind() to bind the newly created OCB to the request.
You can place this function directly into the connect_funcs table passed to resmgr_attach(), at the open position, or you can call iofunc_func_init() to initialize all of the functions to their default values.
For an outline of what this function does, see
Writing the entire function yourself
in the Fleshing Out the Skeleton chapter of Writing a Resource Manager.
Returns:
- EOK
- Successful completion.
- EINVAL
- The requested synchronized modes (O_SYNC, O_DSYNC, O_RSYNC) aren't supported (i.e, IOFUNC_PC_SYNC_IO isn't set in the device's mount configuration).
- ENOSPC
- There's insufficient memory to allocate the OCB.
- ENOMEM
- There's insufficient memory to allocate an internal data structure required by resmgr_open_bind().
Classification:
| Safety: | |
|---|---|
| Cancellation point | No |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |
Page updated:
