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

# getcwd(3)

get working directory pathname

## NAME

**getcwd**, **getwd** – get working directory pathname

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*char* *\**\

**getcwd**(*char \*buf*, *size\_t size*);

*char* *\**\

**getwd**(*char \*buf*);

## DESCRIPTION

The **getcwd**() function copies the absolute pathname of the current working directory into the memory referenced by *buf* and returns a pointer to *buf*. The *size* argument is the size, in bytes, of the array referenced by *buf*.

If *buf* is NULL, space is allocated as necessary to store the pathname and *size* is ignored. This space may later be [free(3)](/free/3.md)'d.

The function **getwd**() is a compatibility routine which calls **getcwd**() with its *buf* argument and a size of MAXPATHLEN (as defined in the include file ⟨sys/param.h⟩). Obviously, *buf* should be at least MAXPATHLEN bytes in length.

These routines have traditionally been used by programs to save the name of a working directory for the purpose of returning to it. A much faster and less error-prone method of accomplishing this is to open the current directory (‘.’) and use the [fchdir(2)](/fchdir/2.md) function to return.

## RETURN VALUES

Upon successful completion, a pointer to the pathname is returned. Otherwise a NULL pointer is returned and the global variable *errno* is set to indicate the error. In addition, **getwd**() copies the error message associated with *errno* into the memory referenced by *buf*.

## ERRORS

The **getcwd**() function will fail if:

- \[EINVAL\]

  The *size* argument is zero.

- \[ENOENT\]

  A component of the pathname no longer exists.

- \[ENOMEM\]

  Insufficient memory is available.

- \[ERANGE\]

  The *size* argument is greater than zero but smaller than the length of the pathname plus 1.

The **getcwd**() function may fail if:

- \[EACCES\]

  Read or search permission was denied for a component of the pathname. This is only checked in limited cases, depending on implementation details.

## SEE ALSO

[chdir(2)](/chdir/2.md), [fchdir(2)](/fchdir/2.md), [malloc(3)](/malloc/3.md), [strerror(3)](/strerror/3.md)

## STANDARDS

The **getcwd**() function conforms to ISO/IEC 9945-1:1990 (“POSIX.1”). The ability to specify a NULL pointer and have **getcwd**() allocate memory as necessary is an extension.

## HISTORY

The **getwd**() function appeared in 4.0BSD.

## BUGS

The **getwd**() function does not do sufficient error checking and is not able to return very long, but valid, paths. It is provided for compatibility.
