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

# fetch(9)

fetch data from user-space

## NAME

**fetch**, **fubyte**, **fuword**, **fuword16**, **fuword32**, **fuword64**, **fueptr**, **fueword**, **fueword32**, **fueword64** – fetch data from user-space

## SYNOPSIS

**#include \<sys/types.h\>**

**#include \<sys/systm.h\>**

*int*\

**fubyte**(*volatile const void \*base*);

*long*\

**fuword**(*volatile const void \*base*);

*int*\

**fuword16**(*volatile const void \*base*);

*int32\_t*\

**fuword32**(*volatile const void \*base*);

*int64\_t*\

**fuword64**(*volatile const void \*base*);

*int*\

**fueptr**(*volatile const void \*base*, *intptr\_t \*val*);

*int*\

**fueword**(*volatile const void \*base*, *long \*val*);

*int*\

**fueword32**(*volatile const void \*base*, *int32\_t \*val*);

*int*\

**fueword64**(*volatile const void \*base*, *int64\_t \*val*);

## DESCRIPTION

The **fetch** functions are designed to copy small amounts of data from user-space of the current process. If the user address is naturally aligned, then the operation will be performed atomically. Otherwise it may fail or be performed non-atomically, depending on the platform.

The **fetch** routines provide the following functionality:

- **fubyte**()

  Fetches a byte of data from the user-space address *base*. The byte read is zero-extended into the results variable.

- **fuword**()

  Fetches a word of data (long) from the user-space address *base*.

- **fuword16**()

  Fetches 16 bits of data from the user-space address *base*. The half-word read is zero-extended into the results variable.

- **fuword32**()

  Fetches 32 bits of data from the user-space address *base*.

- **fuword64**()

  Fetches 64 bits of data from the user-space address *base*.

- **fueptr**()

  Fetches a pointer from the user-space address *base* and stores the result in the variable pointed by *val*. **fueptr**() preserves the provenance of pointers fetched from user-space (see [memory\_model(7)](/memory_model/7.md) for further information).

- **fueword**()

  Fetches a word of data (long) from the user-space address *base* and stores the result in the variable pointed by *val*.

- **fueword32**()

  Fetches 32 bits of data from the user-space address *base* and stores the result in the variable pointed by *val*.

- **fueword64**()

  Fetches 64 bits of data from the user-space address *base* and stores the result in the variable pointed by *val*.

The callers of **fuword**(), **fuword32**() and **fuword64**() functions cannot distinguish between -1 read from userspace and function failure.

## RETURN VALUES

The **fubyte**(), **fuword**(), **fuword16**(), **fuword32**(), and **fuword64**() functions return the data fetched or -1 on failure. The **fueptr**(), **fueword**(), **fueword32**() and **fueword64**() functions return 0 on success and -1 on failure.

## SEE ALSO

[copy(9)](/copy/9.md), [store(9)](/store/9.md)
