---
name: "vn_fullpath"
section: "9"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/vn_fullpath"
---

# vn\_fullpath(9)

convert a vnode reference to a full pathname, given a process context

## NAME

**vn\_fullpath** – convert a vnode reference to a full pathname, given a process context

## SYNOPSIS

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

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

*int*\

**vn\_fullpath**(*struct thread \*td*, *struct vnode \*vp*, *char \*\*retbuf*, *char \*\*freebuf*);

## DESCRIPTION

The **vn\_fullpath**() function makes a “best effort” attempt to generate a string pathname for the passed (locked) vnode; the resulting path, if any, will be relative to the root directory of the process associated with the passed thread pointer. The **vn\_fullpath**() function is implemented by inspecting the VFS name cache, and attempting to reconstruct a path from the process root to the object.

This process is necessarily unreliable for several reasons: intermediate entries in the path may not be found in the cache; files may have more than one name (hard links), not all file systems use the name cache (specifically, most synthetic file systems do not); a single name may be used for more than one file (in the context of file systems covering other file systems); a file may have no name (if deleted but still open or referenced). However, the resulting string may still be more useable to a user than a vnode pointer value, or a device number and inode number. Code consuming the results of this function should anticipate (and properly handle) failure.

Its arguments are:

- *td*

  The thread performing the call; this pointer will be dereferenced to find the process and its file descriptor structure, in order to identify the root vnode to use.

- *vp*

  The vnode to search for; must be locked by the caller.

- *retbuf*

  Pointer to a *char \** that **vn\_fullpath**() may (on success) point at a newly allocated buffer containing the resulting pathname.

- *freebuf*

  Pointer to a *char \** that **vn\_fullpath**() may (on success) point at a buffer to be freed, when the caller is done with *retbuf*.

Typical consumers will declare two character pointers: *fullpath* and *freepath*; they will set *freepath* to NULL, and *fullpath* to a name to use in the event that the call to **vn\_fullpath**() fails. After done with the value of *fullpath*, the caller will check if *freepath* is non-NULL, and if so, invoke [free(9)](/free/9.md) with a pool type of M\_TEMP.

## RETURN VALUES

If the vnode is successfully converted to a pathname, 0 is returned; otherwise, an error number is returned.

## SEE ALSO

[free(9)](/free/9.md)

## AUTHORS

This manual page was written by Robert Watson ⟨rwatson@FreeBSD.org⟩.
