iofunc_ocb_calloc()
QNX SDP8.0C Library ReferenceAPIDeveloper
Allocate an iofunc Open Control Block
Synopsis:
#include <sys/iofunc.h>
iofunc_ocb_t * iofunc_ocb_calloc(
resmgr_context_t * ctp,
iofunc_attr_t * attr );
Arguments:
- ctp
- A pointer to a resmgr_context_t structure that the resource-manager library uses to pass context information between functions.
- attr
- A pointer to a iofunc_attr_t structure that defines the characteristics of the device that the resource manager handles.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The iofunc_ocb_calloc() function allocates an iofunc OCB. It has a number of uses:
- It can be used as a helper function to encapsulate the allocation of the iofunc OCB, so that your routines don't have to know the details of the iofunc OCB structure.
- Because it's in the resource manager shared library, you can override this function with your own, allowing you to manage an OCB that has additional members, perhaps specific to your particular resource manager. If you do this, be sure to place the iofunc OCB structure as the first element of your extended OCB, and also override the iofunc_ocb_free() function to release memory.
- Another reason to override iofunc_ocb_calloc() might be to place limits on the number of OCBs that are in existence at any one time; the current function simply allocates OCBs until the free store is exhausted.
Note:
You should fill in the attribute's mount structure (i.e., the attr->mount pointer)
instead of replacing this function.
If you specify ocb_calloc and ocb_free callouts in the attribute's mount structure, then you should use the callouts instead of calling the standard iofunc_ocb_calloc() and iofunc_ocb_free() functions.
Returns:
A pointer to an iofunc_ocb_t OCB structure, or NULL if an error occurred (errno is set).
Errors:
- ENFILE
- There are too many open files in the system. For iofunc_ocb_calloc(), this happens if there isn't enough memory to allocate the OCB; if you override this function, your replacement might place further restrictions on the number of OCBs.
Examples:
Override iofunc_ocb_calloc() and iofunc_ocb_free() to manage an extended OCB:
typedef struct
{
iofunc_ocb_t iofuncOCB; /* the OCB used by iofunc_* */
int myFlags;
char moreOfMyStuff;
} MyOCBT;
MyOCBT *iofunc_ocb_calloc (resmgr_context_t *ctp,
iofunc_attr_t *attr)
{
return ((MyOCBT *) calloc (1, sizeof (MyOCBT));
}
void iofunc_ocb_free (MyOCBT *ocb)
{
free (ocb);
}
Classification:
Safety: | |
---|---|
Cancellation point | No |
Signal handler | Yes |
Thread | Yes |
Page updated: