int io_close_dup ( resmgr_context_t *ctp,
                   io_close_t *msg,
                   RESMGR_OCB_T *ocb ) 

Classification: I/O function

Default handler: iofunc_close_dup_default()

Helper functions: iofunc_close_dup()

Client functions: close(), fclose()

Messages: _IO_CLOSE_DUP

Data structure:

struct _io_close {
  uint16_t type;
  uint16_t combine_len;

typedef union {
  struct _io_close i;
} io_close_t;

Description: This is the real function handler for the client's close() or fclose() function calls.

If you take over this function, you would almost always call iofunc_close_dup_default() in addition to the work you do. This is because the base layer keeps track of the number of open(), dup(), and close() messages issued for a particular OCB, and will then synthesize an io_close_ocb() outcall (see below) when the last close() message has been received for a particular OCB.

Note that the receive IDs present in ctp->rcvid may not necessarily match up with those passed to io_open().

Note: If your resource manager leaves clients blocked (e.g., on read(), write(), or devctl() calls), you'll need to take over this function, so that you can keep track of which clients are blocked, and unblock them if necessary. For more information, see Unblocking if someone closes the file descriptor in the Unblocking Clients and Handling Interrupts chapter of Writing a Resource Manager.

Returns: The status via the helper macro _RESMGR_STATUS().