VOP_READ9
Read or write a file
Part of VOP_RDWR(9).
Usage
#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);
Overview
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.
Locks
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.
Return values
Zero is returned on success, otherwise an error code is returned.
Errors
- [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.
Releases
83 releases since FreeBSD 2.2.2-RELEASE; the text changed 43 times.