Structure of a resource manager's connect message
struct _io_connect {
uint16_t type;
uint16_t subtype;
uint32_t file_type;
uint16_t reply_max;
uint16_t entry_max;
uint32_t key;
uint32_t handle;
uint32_t ioflag;
uint32_t mode;
uint16_t sflag;
uint16_t access;
uint16_t zero;
uint16_t path_len;
uint8_t eflag;
uint8_t extra_type;
uint16_t extra_len;
char path[1];
};
The _io_connect structure is used to describe a connect message
that a resource manager receives and sends.
The members include:
- type
- IO_CONNECT
- subtype
- The type of connection that the message concerns; one of:
- _IO_CONNECT_COMBINE -- combine with an I/O message.
- _IO_CONNECT_COMBINE_CLOSE -- combine with I/O
message and always close.
- _IO_CONNECT_OPEN
- _IO_CONNECT_UNLINK
- _IO_CONNECT_RENAME
- _IO_CONNECT_MKNOD
- _IO_CONNECT_READLINK
- _IO_CONNECT_LINK
- _IO_CONNECT_RSVD_UNBLOCK -- place holder in the
jump table.
- _IO_CONNECT_MOUNT
- file_type
- The file type; one of the following (defined in
<sys/ftype.h>):
- _FTYPE_ANY -- the path name can be anything.
- _FTYPE_LINK -- reserved for the Process Manager.
- _FTYPE_MOUNT -- receive mount requests on the path
(path must be NULL).
- _FTYPE_MQUEUE -- reserved for a message-queue manager.
- _FTYPE_PIPE -- reserved for a pipe manager.
- _FTYPE_SEM -- reserved for a semaphore manager.
- _FTYPE_SHMEM -- reserved for a shared memory object.
- _FTYPE_SOCKET -- reserved for a socket manager.
- _FTYPE_SYMLINK -- reserved for the Process Manager.
- reply_max
- The maximum length of the reply message.
- entry_max
- The maximum number of _io_connect_entry structures that
the resource manager is willing to accept.
If a path could reference more than one resource manager, it returns
a list of _io_connect_entry structures referring to the
overlapping resource managers.
- key
- Reserved.
- handle
- The handle returned by
resmgr_attach().
- ioflag
- The bottom two bits are modified from traditional Unix values to more
useful bit flags:
- O_RDONLY (0) is converted to _IO_FLAG_RD (0x01)
- O_WRONLY (1) is converted to _IO_FLAG_WR (0x02)
- O_RDWR (2) is converted to _IO_FLAG_RD | _IO_FLAG_WR (0x03)
Note that this translation can be performed without overlapping
into other O_* flags.
Testing is done using:
- ioflag & _IO_FLAG_RD; for read permission.
- ioflag & _IO_FLAG_WR; for write permission.
- If open for reading and writing -- both bits are set.
The remaining values of ioflag are outside this
range and are not modified. These values are:
- O_APPEND -- if set, the file offset is set to
the end of the file prior to each write.
- O_CREAT -- create the file.
- O_DSYNC -- if set, this flag affects subsequent
I/O calls; each call to
write()
waits until all data is successfully transferred
to the storage device such that it's readable on any subsequent open of
the file (even one that follows a system failure) in the absence of a
failure of the physical storage medium. If the physical storage medium
implements a non-write-through cache, then a system failure may be
interpreted as a failure of the physical storage medium, and data may
not be readable even if this flag is set and the write()
indicates that it succeeded.
- O_EXCL -- if you set both O_EXCL
and O_CREAT,
open() fails if the file exists. The check for the
existence of the file and the creation of the file if it doesn't
exist are atomic; no other process that's attempting the same
operation with the same filename at the same time will succeed.
Specifying O_EXCL
without O_CREAT has no effect.
- O_LARGEFILE -- allow the file offset to be
64 bits long.
- O_NOCTTY -- if set, and path identifies
a terminal device, the
open() function doesn't cause the terminal device to become
the controlling terminal for the process.
- O_NONBLOCK -- don't block.
- O_REALIDS -- use the real
uid/gid for permissions checking.
- O_RSYNC -- read I/O operations on the file
descriptor complete at the same level of integrity as
specified by the O_DSYNC and O_SYNC flags.
- O_SYNC -- if set, this flag affects subsequent
I/O calls; each call to
read()
or
write()
is complete only when both the data has been successfully transferred
(either read or written) and all file system information relevant to
that I/O operation (including that required to retrieve said data) is
successfully transferred, including file update and/or access times,
and so on. See the discussion of a successful data transfer in
O_DSYNC, above.
- O_TRUNC -- if the file exists and is a regular
file, and the file is successfully
opened O_WRONLY or O_RDWR,
the file length is truncated to zero and the mode and owner are left
unchanged. O_TRUNC has no effect on FIFO or block or
character special files or directories. Using O_TRUNC
with O_RDONLY has no effect.
- mode
- Contains the type and access permissions of the file.
The type is one of:
- S_IFBLK -- block special.
- S_IFCHR -- character special.
- S_IFDIR -- directory.
- S_IFIFO -- FIFO special.
- S_IFLNK -- symbolic link.
- S_IFMT -- type of file.
- S_IFNAM -- special named file.
- S_IFREG -- regular.
- S_IFSOCK -- socket.
The permissions are a combination of:
Owner
|
Group
|
Others
|
Permission |
S_IRUSR
|
S_IRGRP
|
S_IROTH
|
Read |
S_IRWXU
|
S_IRWXG
|
S_IRWXO
|
Read, write, execute/search. A bitwise
inclusive OR of the other three
constants (S_IRWXU is OR of IRUSR, S_IWSUR and S_IXUSR.) |
S_IWUSR
|
S_IWGRP
|
S_IWOTH
|
Write |
S_IXUSR
|
S_IXGRP
|
S_IXOTH
|
Execute/search |
The following bits define miscellaneous permissions used by other
implementations:
Bit
|
Equivalent
|
S_IEXEC
|
S_IXUSR
|
S_IREAD
|
S_IRUSR
|
S_IWRITE
|
S_IWUSR
|
- sflag
- How the client wants the file to be shared; a combination of the
following bits:
- SH_COMPAT -- set compatibility mode.
- SH_DENYRW -- prevent read or write access to the
file.
- SH_DENYWR -- prevent write access to the file.
- SH_DENYRD -- prevent read access to the file.
- SH_DENYNO -- permit both read and write access
to the file.
- access
- Contains a combination of _IO_FLAG_RD and/or _IO_FLAG_WR bits, which are
used internally as a mask of access permissions to allow from ioflag.
- path_len
- The length of the path member.
- eflag
- Extended flags:
- _IO_CONNECT_EFLAG_DIR -- the path referenced a
directory.
- _IO_CONNECT_EFLAG_DOT -- the last component of a
path was . or .. (i.e. the current or parent
directory).
- extra_type
- One of:
- _IO_CONNECT_EXTRA_NONE
- _IO_CONNECT_EXTRA_LINK
- _IO_CONNECT_EXTRA_SYMLINK
- _IO_CONNECT_EXTRA_MQUEUE
- _IO_CONNECT_EXTRA_PHOTON
- _IO_CONNECT_EXTRA_SOCKET
- _IO_CONNECT_EXTRA_SEM
- _IO_CONNECT_EXTRA_RESMGR_LINK
- _IO_CONNECT_EXTRA_PROC_SYMLINK
- _IO_CONNECT_EXTRA_RENAME
- _IO_CONNECT_EXTRA_MOUNT
- _IO_CONNECT_EXTRA_MOUNT_OCB
- extra_len
- The length of any extra data included in the message.
- path
- The path that the client is trying to connect to, relative to the
resource manager's mountpoint.
QNX Neutrino
_io_connect_ftype_reply,
_io_connect_link_reply,
resmgr_connect_funcs_t
"The _IO_OPEN message for filesystems"
in the Writing a Resource Manager
chapter of the Programmer's Guide.