NAME
getcwd, get_current_dir_name, getwd - Get current working directory
SYNOPSIS
#include <unistd.h>
I char *getcwd(char * buf , size_t size );
#define _BSD_SOURCE /* Or: #define _XOPEN_SOURCE 500 */
#include <unistd.h>
I char *getwd(char * buf );
#define _GNU_SOURCE
#include <unistd.h>
char *get_current_dir_name(void);
DESCRIPTION
The
R getcwd ()
function copies an absolute pathname of the current working directory
to the array pointed to by
R buf ,
which is of length
R size .
If the current absolute pathname would require a buffer longer than
size
elements, NULL is returned, and
errno
is set to
R ERANGE ;
an application should check for this error, and allocate a larger
buffer if necessary.
If
buf
is NULL, the behavior of
R getcwd ()
is undefined.
As an extension to the POSIX.1-2001 standard, Linux (libc4, libc5, glibc)
R 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.
R 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.
R getwd (),
does not
malloc(3)
any memory.
The
buf
argument should be a pointer to an array at least
PATH_MAX
bytes long.
R 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 filesystem
and may even be unlimited.
For portability and security reasons, use of
R getwd ()
is deprecated.
RETURN VALUE
NULL
on failure with
errno
set accordingly, and
buf
on success.
The contents of the array pointed to by
R buf
is undefined on error.
ERRORS
EACCES
Permission to read or search a component of the filename was denied.
EFAULT
R buf
points to a bad address.
EINVAL
The
R size
argument is zero and
R buf
is not a null pointer.
ENOENT
The current working directory has been unlinked.
ERANGE
The
R size
argument is less than the length of the working directory name.
You need to allocate a bigger array and try again.
CONFORMING TO
R getcwd ()
conforms to POSIX.1-2001.
R getwd ()
is present in POSIX.1-2001, but marked LEGACY.
R get_current_dir_name ()
is a GNU extension.
NOTES
Under Linux, the function
R getcwd ()
is a system call (since 2.1.92).
On older systems it would query
R /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
R 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