− return the canonicalized absolute pathname
*realpath(const char *path, char
Macro Requirements for glibc (see
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
expands all symbolic links and resolves references to
/./, /../ and extra '/' characters in the
null-terminated string named by path to produce a
canonicalized absolute pathname. The resulting pathname is
stored as a null-terminated string, up to a maximum of
PATH_MAX bytes, in the buffer pointed to by
resolved_path. The resulting path will have no
symbolic link, /./ or /../ components.
resolved_path is specified as NULL, then
realpath() uses malloc(3) to allocate a buffer
of up to PATH_MAX bytes to hold the resolved
pathname, and returns a pointer to this buffer. The caller
should deallocate this buffer using free(3).
If there is no
error, realpath() returns a pointer to the
returns NULL, the contents of the array resolved_path
are undefined, and errno is set to indicate the
Read or search permission was
denied for a component of the path prefix.
path is NULL. (In glibc versions before 2.3, this
error is also returned if resolved_path is NULL.)
An I/O error occurred while reading from the
Too many symbolic links were encountered in translating
A component of a pathname
exceeded NAME_MAX characters, or an entire pathname
exceeded PATH_MAX characters.
Out of memory.
The named file does not exist.
A component of the path prefix
is not a directory.
explanation of the terms used in this section, see
says that the behavior if resolved_path is NULL is
implementation-defined. POSIX.1-2008 specifies the behavior
described in this page.
In 4.4BSD and
Solaris, the limit on the pathname length is
MAXPATHLEN (found in <sys/param.h>).
SUSv2 prescribes PATH_MAX and NAME_MAX, as
found in <limits.h> or provided by the
pathconf(3) function. A typical source fragment would
path_max = PATH_MAX;
path_max = pathconf(path, _PC_PATH_MAX);
if (path_max <= 0)
path_max = 4096;
(But see the
If the call fails with either EACCES or ENOENT
and resolved_path is not NULL, then the prefix of
path that is not readable or does not exist is
returned in resolved_path.
POSIX.1-2001 standard version of this function is broken by
design, since it is impossible to determine a suitable size
for the output buffer, resolved_path. According to
POSIX.1-2001 a buffer of size PATH_MAX suffices, but
PATH_MAX need not be a defined constant, and may have
to be obtained using pathconf(3). And asking
pathconf(3) does not really help, since, on the one
hand POSIX warns that the result of pathconf(3) may
be huge and unsuitable for mallocing memory, and on the
other hand pathconf(3) may return −1 to signify
that PATH_MAX is not bounded. The
resolved_path == NULL feature, not
standardized in POSIX.1-2001, but standardized in
POSIX.1-2008, allows this design problem to be avoided.
getcwd(3), pathconf(3), sysconf(3)
This page is
part of release 4.04 of the Linux man-pages project.
A description of the project, information about reporting
bugs, and the latest version of this page, can be found at