GETCWDGETCWD



GETCWDGETCWD

NAME
SYNOPSIS
DESCRIPTION
RETURN VALUE
ERRORS
CONFORMING TO
SEE ALSO
NAME
SYNOPSIS
DESCRIPTION
RETURN VALUE
ERRORS
CONFORMING TO
NOTES
SEE ALSO
COLOPHON

NAME

getcwd − get current working directory

SYNOPSIS

/*
* This page documents the getcwd(2) system call, which
* is not defined in any user-space header files; you should
* use getcwd(3) defined in <unistd.h> instead in applications.
*/

long getcwd(char *buf, unsigned long size);

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 path name would require a buffer longer than size elements, -1 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 behaviour of getcwd() is undefined.

RETURN VALUE

-1 on failure (for example, if the current directory is not readable), with errno set accordingly, and the number of characters stored in buf on success. The contents of the array pointed to by buf is undefined on error.

Note that this return value differs from the getcwd(3) library function, which returns NULL on failure and the address of buf on success.

ERRORS

ENOMEM

if user memory cannot be mapped

ENOENT

if directory does not exist (i.e. it has been deleted)

ERANGE

if not enough space available for storing the path

EFAULT

if memory access violation occurs while copying

CONFORMING TO

The getcwd system call is Linux specific, use the getcwd C library function for portability.

SEE ALSO

getcwd(3)

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)):

get_current_dir_name():

_GNU_SOURCE

getwd():

Since glibc 2.12:

_BSD_SOURCE ||
(_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
!(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700)

Before glibc 2.12:

_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

DESCRIPTION

These functions return a null-terminated string containing an absolute pathname that is the current working directory of the calling process. The pathname is returned as the function result and via the argument buf, if present.

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 length of the absolute pathname of the current working directory, including the terminating null byte, exceeds size bytes, NULL is returned, and errno is set to ERANGE; an application should check for this error, and allocate a larger buffer if necessary.

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. In this case, the allocated buffer has the length size unless size is zero, when buf is allocated as big as necessary. The caller should free(3) the returned buffer.

get_current_dir_name() will malloc(3) an array big enough to hold the absolute pathname of the current working directory. If the environment variable PWD is set, and its value is correct, then that value will be returned. The caller should free(3) the returned buffer.

getwd() does not malloc(3) any memory. The buf argument should be a pointer to an array at least PATH_MAX bytes long. If the length of the absolute pathname of the current working directory, including the terminating null byte, exceeds PATH_MAX bytes, NULL is returned, and errno is set to ENAMETOOLONG. (Note that on some systems, PATH_MAX may not be a compile-time constant; furthermore, its value may depend on the file system, see pathconf(3).) For portability and security reasons, use of getwd() is deprecated.

RETURN VALUE

On success, these functions return a pointer to a string containing the pathname of the current working directory. In the case getcwd() and getwd() this is the same value as buf.

On failure, these functions return NULL, and errno is set to indicate the error. The contents of the array pointed to by buf are 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.

EINVAL

getwd(): buf is NULL.

ENAMETOOLONG

getwd(): The size of the null-terminated absolute pathname string exceeds PATH_MAX bytes.

ENOENT

The current working directory has been unlinked.

ERANGE

The size argument is less than the length of the absolute pathname of the working directory, including the terminating null byte. You need to allocate a bigger array and try again.

CONFORMING TO

getcwd() conforms to POSIX.1-2001. Note however that POSIX.1-2001 leaves the behavior of getcwd() unspecified if buf is NULL.

getwd() is present in POSIX.1-2001, but marked LEGACY. POSIX.1-2008 removes the specification of getwd(). Use getcwd() instead. POSIX.1-2001 does not define any errors for getwd().

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.35 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://man7.org/linux/man-pages/.



More Linux Commands

manpages/setcifsacl.1.html
setcifsacl(1) Userspace helper to alter an ACL in a security
This tool is part of the cifs-utils suite. setcifsacl is a userspace helper program for the Linux CIFS client file system. It is intended to alter an ACL of a s

manpages/XMoveResizeWindow.3.html
XMoveResizeWindow(3) - configure windows and window changes
XMoveResizeWindow.3 - The XConfigureWindow function uses the values specified in the XWindowChanges structure to reconfigure a windows size, position, border, a

manpages/resolve_stack_dump.1.html
resolve_stack_dump(1) - resolve numeric stack trace dump to
resolve_stack_dump resolves a numeric stack dump to symbols. Invoke resolve_stack_dump like this: shell&gt; resolve_stack_dump [options] symbols_file [numeric_dump

manpages/TIFFbuffer.3tiff.html
TIFFbuffer(3tiff) - I/O buffering control routines (ManPage)
The following routines are provided for client-control of the I/O buffers used by the library. Applications need never use these routines; they are provided onl

manpages/Time::Zone.3pm.html
Time::Zone(3pm) - miscellaneous timezone manipulations routi
This is a collection of miscellaneous timezone manipulation routines. tz2zone() parses the TZ environment variable and returns a timezone string suitable for in

manpages/glColor4usv.3gl.html
glColor4usv(3gl) - set the current color - Linux man page...
The GL stores both a current single-valued color index and a current four-valued RGBA color. glColor sets a new four-valued RGBA color. glColor has two major va

manpages/gnutls_handshake_get_last_in.3.html
gnutls_handshake_get_last_in(3) - API function (Man Page)...
gnutls_handshake_get_last_in.3 - This function is only useful to check where the last performed handshake failed. If the previous handshake succeed or was not p

manpages/check_perms.8.html
check_perms(8) - Check permissions of Mailman's files.......
With no arguments, just check and report all the files that have bogus permissions or group ownership. AUTHOR Author of Mailman is the Mailman Cabal, see http:/

manpages/ctags.1.html
ctags(1) - Generate tag files for source code (Man Page)....
The etags program is used to create a tag table file, in a format understood by emacs(1); the gnuctags program is used to create a similar table in a format und

manpages/iso_8859-11.7.html
iso_8859-11(7) - ISO 8859-11 character set encoded in octal,
The ISO 8859 standard includes several 8-bit extensions to the ASCII character set (also known as ISO 646-IRV). ISO 8859-11 encodes the characters used in the T

manpages/Tk_CoordsToWindow.3.html
Tk_CoordsToWindow(3) - Find window containing a point.......
Tk_CoordsToWindow locates the window that contains a given point. The point is specified in root coordinates with rootX and rootY (if a virtual-root window mana

manpages/snmp_sess_open.3.html
snmp_sess_open(3) - session functions - Linux manual page...
These functions define a subset of the API that can be used to manage single SNMP sessions in a multi-threaded application. Except for snmp_sess_session(), thes





We can't live, work or learn in freedom unless the software we use is free.