---
name: "VOP_READ"
section: "9"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/VOP_RDWR"
---

# VOP\_READ(9)

read or write a file

Part of [VOP\_RDWR(9)](/VOP_RDWR/9.md).

## NAME

**VOP\_READ**, **VOP\_WRITE** – read or write a file

## SYNOPSIS

**#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*);

## DESCRIPTION

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.

## SEE ALSO

[uiomove(9)](/uiomove/9.md), [vnode(9)](/vnode/9.md)

## AUTHORS

This manual page was written by Doug Rabson.
