The Open Group Base Specifications Issue 7
IEEE Std 1003.1-2008, 2016 Edition
Copyright © 2001-2016 The IEEE and The Open Group

#### NAME

> basename - return the last component of a pathname

#### SYNOPSIS

> ``[XSI] #include <libgen.h>
> char *basename(char *`path`);``
> `
> `

#### DESCRIPTION

> The basename() function shall take the pathname pointed to by path and return a pointer to the final component of the pathname, deleting any trailing `'/'` characters.

> If the string pointed to by path consists entirely of the `'/'` character, basename() shall return a pointer to the string `"/"`. If the string pointed to by path is exactly `"//"`, it is implementation-defined whether `'/'` or `"//"` is returned.

> If path is a null pointer or points to an empty string, basename() shall return a pointer to the string `"."`.

> The basename() function may modify the string pointed to by path, and may return a pointer to internal storage. The returned pointer might be invalidated or the storage might be overwritten by a subsequent call to basename(). The returned pointer might also be invalidated if the calling thread is terminated.

> The basename() function need not be thread-safe.

#### RETURN VALUE

> The basename() function shall return a pointer to the final component of path.

#### ERRORS

> No errors are defined.

The following sections are informative.

#### EXAMPLES

> ##### Using basename()

> The following program fragment returns a pointer to the value lib, which is the base name of /usr/lib.

>     #include <libgen.h>
>     ...
>     char name[] = "/usr/lib";
>     char *base;

>     base = basename(name);
>     ...

> ##### Sample Input and Output Strings for the basename() and dirname() Functions and the basename and dirname Utilities

> basename() |  |  | basename | Output | Output
> --- | --- | --- | --- | --- | ---
> and dirname() | String | String | and dirname | Written by | Written by
> Functions path | Returned by | Returned by | Utilities | basename | dirname
> Argument | basename() | dirname() | string Operand | Utility | Utility
> "usr" | "usr" | "." | usr | usr | .
> "usr/" | "usr" | "." | usr/ | usr | .
> "" | "." | "." | "" | . or empty string | .
> "/" | "/" | "/" | / | / | /
> "//" | "/" or `"//"` | "/" or `"//"` | // | / or `//` | / or `//`
> "///" | "/" | "/" | /// | / | /
> "/usr/" | "usr" | "/" | /usr/ | usr | /
> "/usr/lib" | "lib" | "/usr" | /usr/lib | lib | /usr
> "//usr//lib//" | "lib" | "//usr" | //usr//lib// | lib | //usr
> "/home//dwc// | "test" | "/home//dwc" | /home//dwc// | test | /home//dwc
> test" |  |  | test |  |

#### APPLICATION USAGE

> None.

#### RATIONALE

> None.

#### FUTURE DIRECTIONS

> None.

#### SEE ALSO

> dirname

> XBD <libgen.h>

> XCU basename

#### CHANGE HISTORY

> First released in Issue 4, Version 2.

#### Issue 5

> Moved from X/OPEN UNIX extension to BASE.

> Normative text previously in the APPLICATION USAGE section is moved to the DESCRIPTION.

> A note indicating that this function need not be reentrant is added to the DESCRIPTION.

#### Issue 6

> In the DESCRIPTION, the note about reentrancy is expanded to cover thread-safety.

> IEEE Std 1003.1-2001/Cor 2-2004, item XSH/TC2/D6/20 is applied, changing the DESCRIPTION to make it clear that the string referenced is the string pointed to by path`.`

#### `Issue 7`

> `Austin Group Interpretation 1003.1-2001 #156 is applied.`

> `POSIX.1-2008, Technical Corrigendum 1, XSH/TC1-2008/0041 [75] is applied.`

> `POSIX.1-2008, Technical Corrigendum 2, XSH/TC2-2008/0047 [656], XSH/TC2-2008/0048 [928], and XSH/TC2-2008/0049 [612] are applied.`

`End of informative text.`

``

`return to top of page
`

UNIX ® is a registered Trademark of The Open Group.
POSIX ® is a registered Trademark of The IEEE.
Copyright © 2001-2016 The IEEE and The Open Group, All Rights Reserved
[ Main Index | XBD | XSH | XCU | XRAT ]