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

# dirname(3)

extract the directory part of a pathname

## NAME

**dirname** – extract the directory part of a pathname

## SYNOPSIS

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

*char* *\**\

**dirname**(*char \*path*);

*char* *\**\

**dirname\_r**(*const char \*path*, *char \*dname*);

## DESCRIPTION

The **dirname**() function is the converse of [basename(3)](/basename/3.md); it returns a pointer to the parent directory of the pathname pointed to by *path*. Any trailing ‘/’ characters are not counted as part of the directory name.

## IMPLEMENTATION NOTES

The **dirname**() function returns a pointer to internal storage space allocated on the first call that will be overwritten by subsequent calls. **dirname\_r**() is therefore preferred for threaded applications.

Other vendor implementations of **dirname**() may modify the contents of the string passed to **dirname**(); if portability is desired, this should be taken into account when writing code which calls this function.

## RETURN VALUES

If *path* is a null pointer, the empty string, or contains no ‘/’ characters, **dirname**() returns a pointer to the string ".", signifying the current directory. Otherwise, it returns a pointer to the parent directory of *path*.

If **dirname**() fails, 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.

- \[ENOMEM\]

  The static buffer used for storing the path in **dirname**() could not be allocated.

## SEE ALSO

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

## STANDARDS

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

## HISTORY

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

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

## AUTHORS

Nuxi, the Netherlands
