Allocate an iofunc Open Control Block


#include <sys/iofunc.h>

iofunc_ocb_t * iofunc_ocb_calloc( 
                     resmgr_context_t * ctp,
                     iofunc_attr_t * attr );


A pointer to a resmgr_context_t structure that the resource-manager library uses to pass context information between functions.
A pointer to a iofunc_attr_t structure that defines the characteristics of the device that the resource manager handles.



Use the -l c option to qcc to link against this library. This library is usually included automatically.


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.
You should fill in the attribute's mount structure (i.e. the attr->mount pointer) instead of replacing this function.

If you specify iofunc_ocb_calloc() and iofunc_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.


A pointer to an iofunc_ocb_t OCB structure.


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


QNX Neutrino

Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes