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:
QNX Neutrino
| Safety: |  | 
|---|
| Cancellation point | No | 
| Interrupt handler | No | 
| Signal handler | Yes | 
| Thread | Yes |