VOP_READ,
VOP_WRITE —
read or write a file
#include
<sys/param.h>
#include <sys/vnode.h>
#include <sys/uio.h>
int
VOP_READ(struct
vnode *vp, struct uio
*uio, int ioflag,
struct ucred *cred);
int
VOP_WRITE(struct
vnode *vp, struct uio
*uio, int ioflag,
struct ucred *cred);
These entry points read or write the contents of a file.
The arguments are:
- vp
- The vnode of the file.
- uio
- The location of the data to be read or written.
- ioflag
- Various flags.
- cnp
- The credentials of the caller.
The ioflag argument is used to give
directives and hints to the file system. When attempting a read, the high 16
bits are used to provide a read-ahead hint (in units of file system blocks)
that the file system should attempt. The low 16 bits are a bit mask which
can contain the following flags:
IO_UNIT
- Do I/O as atomic unit.
IO_APPEND
- Append write to end.
IO_SYNC
- Do I/O synchronously.
IO_NODELOCKED
- Underlying node already locked.
IO_NDELAY
FNDELAY
flag set in file table.
IO_VMIO
- Data already in VMIO space.
The file should be locked on entry and will still be locked on
exit. Rangelock covering the whole i/o range should be owned around the
call.
Zero is returned on success, otherwise an error code is
returned.
- [
EFBIG]
- An attempt was made to write a file that exceeds the process's file size
limit or the maximum file size.
- [
ENOSPC]
- The file system is full.
- [
EPERM]
- An append-only flag is set on the file, but the caller is attempting to
write before the current end of file.
This manual page was written by Doug
Rabson.