---
name: "basename"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/basename/3"
---

# basename(3)

extract the base portion of a pathname

## NAME

**basename** – extract the base portion of a pathname

## SYNOPSIS

**#include \<libgen.h\>**

*char* *\**\

**basename**(*char \*path*);

*char* *\**\

**basename\_r**(*const char \*path*, *char \*bname*);

## DESCRIPTION

The **basename**() function returns the last component from the pathname pointed to by *path*, deleting any trailing ‘/’ characters.

The **basename\_r**() variation accepts a buffer of at least MAXPATHLEN bytes in which to store the resulting component.

## IMPLEMENTATION NOTES

This implementation of **basename**() returns a pointer to internal storage space allocated on the first call that will be overwritten by subsequent calls. **basename\_r**() is therefore preferred for threaded applications. Other vendor implementations of **basename**() may modify the contents of the string passed to **basename**(); this should be taken into account when writing code which calls this function if portability is desired.

## RETURN VALUES

If *path* consists entirely of ‘/’ characters, a pointer to the string "/" is returned. If *path* is a null pointer or the empty string, a pointer to the string "." is returned. Otherwise, they return a pointer to the last component of *path*.

If they fail, a null pointer is returned and the global variable *errno* is set to indicate the error.

## ERRORS

The following error codes may be set in *errno*:

- \[ENAMETOOLONG\]

  The path component to be returned was larger than MAXPATHLEN.

## SEE ALSO

[basename(1)](/basename/1.md), [dirname(1)](/dirname/1.md), [dirname(3)](/dirname/3.md), [compat(5)](/compat/5.md)

## STANDARDS

The **basename**() function conforms to X/Open Portability Guide Issue 4, Version 2 (“XPG4.2”).

## HISTORY

The **basename**() function first appeared in OpenBSD 2.2 and FreeBSD 4.2.

The **basename\_r**() function first appeared in OS X 10.12.

## AUTHORS

Nuxi, the Netherlands
