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

# fhreadlink(2)

read value of a symbolic link

## NAME

**fhreadlink** – read value of a symbolic link

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

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

*int*\

**fhreadlink**(*fhandle\_t \*fhp*, *char \*buf*, *size\_t bufsize*);

## DESCRIPTION

The **fhreadlink**() system call places the contents of the symbolic link *fhp* in the buffer *buf*, which has size *bufsiz*. The **fhreadlink**() system call does not append a NUL character to *buf*.

## RETURN VALUES

The call returns the count of characters placed in the buffer if it succeeds, or a -1 if an error occurs, placing the error code in the global variable *errno*.

## ERRORS

The **fhreadlink**() system call will fail if:

- \[ENOENT\]

  The named file does not exist.

- \[ELOOP\]

  Too many symbolic links were encountered in translating the file handle *fhp*.

- \[EINVAL\]

  The named file is not a symbolic link.

- \[EIO\]

  An I/O error occurred while reading from the file system.

- \[EINTEGRITY\]

  Corrupted data was detected while reading from the file system.

- \[EFAULT\]

  The *buf* argument extends outside the process's allocated address space.

- \[ESTALE\]

  The file handle *fhp* is no longer valid

## SEE ALSO

[fhlink(2)](/fhlink/2.md), [fhstat(2)](/fhstat/2.md), [readlink(2)](/readlink/2.md)

## HISTORY

The **fhreadlink**() system call first appeared in FreeBSD 12.1.
