The members of the mount structure, specifically the conf and
flags members, modify the behavior of some of the iofunc layer
functions.
If you need to modify any members of the mount structure, use iofunc_mount_init() to initialize it.
For example, your program saves files to a file system. You can use
iofunc_mount_init() and iofunc_mount_set_time() to set a timestamp resolution for open
files that matches the resolution the file system uses (a POSIX requirement).
The iofunc_mount_t structure is optional and contains at least the following:
typedef struct _iofunc_mount {
uint32_t flags;
uint32_t conf;
dev_t dev;
int32_t blocksize;
iofunc_funcs_t *funcs;
void *power;
size_t size;
uint32_t ext_flags;
uint32_t timeres;
uint64_t reserved[4];
} iofunc_mount_t;
The variables are:
- flags
- Contains one relevant bit (manifest constant IOFUNC_MOUNT_32BIT),
which indicates that the offsets used by this resource manager are 32-bit (as opposed to the extended 64-bit offsets).
The user-modifiable mount flags are defined as IOFUNC_MOUNT_FLAGS_PRIVATE
(see <sys/iofunc.h>).
- conf
- Contains several bits:
- IOFUNC_PC_CHOWN_RESTRICTED
- Causes the default handler for the _IO_CHOWN message to behave in a manner defined by POSIX as
chown-restricted.
- IOFUNC_PC_NO_TRUNC
- Has no effect on the iofunc layer libraries,
but is returned by the iofunc layer's default _IO_PATHCONF handler.
- IOFUNC_PC_SYNC_IO
- Indicates that the filesystem supports synchronous I/O operations.
If this bit isn't set, the following may occur:
- IOFUNC_PC_LINK_DIR
- Controls whether or not root is allowed to link and unlink directories.
- IOFUNC_PC_ACL
- Indicates whether or not the resource manager supports access control lists.
For more information about ACLs, see
Working with Access Control Lists (ACLs)
in the QNX Neutrino Programmer's Guide.
- IOFUNC_PC_EXT
- Set automatically when iofunc_mount_init() is called to set the iofunc_mount_t structure.
Note that the options mentioned above for the conf
member are returned by the iofunc layer _IO_PATHCONF default handler.
- dev
- Contains the device number for the filesystem.
This number is returned to the client's stat() function in the
struct stat
st_dev member.
- blocksize
- Contains the block size of the device.
On filesystem types of resource managers, this indicates the native blocksize of the disk, e.g., 512 bytes.
- funcs
- Contains the following structure:
struct _iofunc_funcs {
unsigned nfuncs;
IOFUNC_OCB_T *(*ocb_calloc) (resmgr_context_t *ctp,
IOFUNC_ATTR_T *attr);
void (*ocb_free) (IOFUNC_OCB_T *ocb);
int (*attr_lock)(IOFUNC_ATTR_T *attr);
int (*attr_unlock)(IOFUNC_ATTR_T *attr);
int (*attr_trylock)(IOFUNC_ATTR_T *attr);
};
where:
- nfuncs
- Indicates the number of functions present in the structure; you should fill it
with the manifest constant _IOFUNC_NFUNCS.
- ocb_calloc() and ocb_free()
- Allows you to override the OCBs on a per-mountpoint basis (see Extending the OCB and attribute
structures in the Extending the POSIX-Layer Data Structures chapter).
If these members are NULL, then the default library versions (iofunc_ocb_calloc() and iofunc_ocb_free()) are used. You must specify either
both or neither of these functions; they operate as a matched pair.
- attr_lock(), attr_unlock() and
attr_trylock()
- Allows you to create customized versions of the functions that lock, unlock, and
attempt to lock the attribute structure.
- power
- Reserved for future use.
- size
- Contains the size of the iofunc_mount_t function. Set by iofunc_mount_init().
- ext_flags
- Extends the range of possible flags values.
- timeres
- Contains the timestamp resolution for iofunc functions and structures. Set by iofunc_mount_set_time().
- reserved
- Reserved for future use.