![]()  | 
![]()  | 
![]()  | 
![]()  | 
I/O attribute structure
#include <sys/iofunc.h>
typedef struct _iofunc_attr {
    IOFUNC_MOUNT_T                  *mount;
    uint32_t                        flags;
    int32_t                         lock_tid;
    uint16_t                        lock_count;
    uint16_t                        count;
    uint16_t                        rcount;
    uint16_t                        wcount;
    uint16_t                        rlocks;
    uint16_t                        wlocks;
    struct _iofunc_mmap_list        *mmap_list;
    struct _iofunc_lock_list        *lock_list;
    void                            *list;
    uint32_t                        list_size;
#if !defined(_IOFUNC_OFFSET_BITS) || _IOFUNC_OFFSET_BITS == 64
 #if _FILE_OFFSET_BITS - 0 == 64
    off_t                           nbytes;
    ino_t                           inode;
 #else
    off64_t                         nbytes;
    ino64_t                         inode;
 #endif
#elif _IOFUNC_OFFSET_BITS - 0 == 32
 #if !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS == 32
  #if defined(__LITTLEENDIAN__)
    off_t                           nbytes;
    off_t                           nbytes_hi;
    ino_t                           inode;
    ino_t                           inode_hi;
  #elif defined(__BIGENDIAN__)
    off_t                           nbytes_hi;
    off_t                           nbytes;
    ino_t                           inode_hi;
    ino_t                           inode;
  #else
   #error endian not configured for system
  #endif
 #else
  #if defined(__LITTLEENDIAN__)
    int32_t                         nbytes;
    int32_t                         nbytes_hi;
    int32_t                         inode;
    int32_t                         inode_hi;
  #elif defined(__BIGENDIAN__)
    int32_t                         nbytes_hi;
    int32_t                         nbytes;
    int32_t                         inode_hi;
    int32_t                         inode;
  #else
   #error endian not configured for system
  #endif
 #endif
#else
 #error _IOFUNC_OFFSET_BITS value is unsupported
#endif
    uid_t                           uid;
    gid_t                           gid;
    time_t                          mtime;
    time_t                          atime;
    time_t                          ctime;
    mode_t                          mode;
    nlink_t                         nlink;
    dev_t                           rdev;
} iofunc_attr_t;
The iofunc_attr_t structure describes the attributes of the device that's associated with a resource manager. The members include the following:
In addition to the above, your resource manager can use in any way the bits in the range defined by IOFUNC_ATTR_PRIVATE (see <sys/iofunc.h>).
The resource manager layer automatically locks the attribute (using iofunc_attr_lock()) for you when certain handler functions are called (i.e. IO_*).
![]()  | 
A thread must unlock the attributes as many times as it locked them. | 
For a file, this would contain the file's size. For special devices (e.g. /dev/null) that don't support lseek() or have a radically different interpretation for lseek(), this field isn't used (because you wouldn't use any of the helper functions, but would supply your own instead.) In these cases, we recommend that you set this field to zero, unless there's a meaningful interpretation that you care to put to it.
![]()  | 
One or more of the three time members may be invalidated as a result of calling an iofunc-layer function. To see if a time member is invalid, check the flags member. This is to avoid having each and every I/O message handler go to the kernel and request the current time of day, just to fill in the attribute structure's time member(s). | 
To fill the members with the correct time, call iofunc_time_update().
QNX Neutrino
iofunc_attr_lock(), iofunc_attr_trylock(), iofunc_attr_unlock(), iofunc_lock_default(), iofunc_mmap(), iofunc_mmap_default(), iofunc_ocb_t, iofunc_time_update()
![]()  | 
![]()  | 
![]()  | 
![]()  |