Provided by: manpages-dev_3.01-1_all bug

NAME

       getcwd, getwd, get_current_dir_name - Get current working directory

SYNOPSIS

       #include <unistd.h>

       char *getcwd(char *buf, size_t size);

       char *getwd(char *buf);

       char *get_current_dir_name(void);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       getcwd(): _BSD_SOURCE || _XOPEN_SOURCE >= 500
       get_current_dir_name(): _GNU_SOURCE

DESCRIPTION

       The  getcwd()  function  copies  an  absolute  pathname  of the current
       working directory to the array pointed to by buf, which  is  of  length
       size.

       If  the  current  absolute  pathname would require a buffer longer than
       size elements, NULL is  returned,  and  errno  is  set  to  ERANGE;  an
       application  should  check for this error, and allocate a larger buffer
       if necessary.

       If buf is NULL, the behavior of getcwd() is undefined.

       As an extension to the  POSIX.1-2001  standard,  Linux  (libc4,  libc5,
       glibc) getcwd() allocates the buffer dynamically using malloc(3) if buf
       is NULL on call.  In this case, the allocated  buffer  has  the  length
       size  unless  size  is zero, when buf is allocated as big as necessary.
       It is possible (and, indeed, advisable) to free(3) the buffers if  they
       have been obtained this way.

       get_current_dir_name(),  will malloc(3) an array big enough to hold the
       current directory name.  If the environment variable PWD  is  set,  and
       its value is correct, then that value will be returned.

       getwd(),  does  not malloc(3) any memory.  The buf argument should be a
       pointer to an array at least PATH_MAX bytes long.   getwd()  does  only
       return  the  first  PATH_MAX  bytes  of the actual pathname.  Note that
       PATH_MAX need not be a compile-time constant; it may depend on the file
       system  and  may  even  be  unlimited.   For  portability  and security
       reasons, use of getwd() is deprecated.

RETURN VALUE

       NULL on failure with errno set accordingly, and buf  on  success.   The
       contents of the array pointed to by buf is undefined on error.

ERRORS

       EACCES Permission  to  read  or  search a component of the filename was
              denied.

       EFAULT buf points to a bad address.

       EINVAL The size argument is zero and buf is not a null pointer.

       ENOENT The current working directory has been unlinked.

       ERANGE The size argument  is  less  than  the  length  of  the  working
              directory  name.   You  need  to allocate a bigger array and try
              again.

CONFORMING TO

       getcwd() conforms to POSIX.1-2001.  getwd() is present in POSIX.1-2001,
       but marked LEGACY.  get_current_dir_name() is a GNU extension.

NOTES

       Under Linux, the function getcwd() is a system call (since 2.1.92).  On
       older systems it would query /proc/self/cwd.  If both system  call  and
       proc file system are missing, a generic implementation is called.  Only
       in that case can these calls fail under Linux with EACCES.

       These functions are often used to save  the  location  of  the  current
       working  directory  for  the purpose of returning to it later.  Opening
       the current directory (".") and calling fchdir(2) to return is  usually
       a  faster  and  more  reliable  alternative when sufficiently many file
       descriptors are available, especially on platforms other than Linux.

SEE ALSO

       chdir(2), fchdir(2), open(2), unlink(2), free(3), malloc(3)

COLOPHON

       This page is part of release 3.01 of the Linux  man-pages  project.   A
       description  of  the project, and information about reporting bugs, can
       be found at http://www.kernel.org/doc/man-pages/.