Section: Linux Programmer's Manual (3)
Return to Main Contents
realpath - return the canonicalized absolute pathname
char *realpath(const char *path, char *resolved_path);
expands all symbolic links and resolves references
characters in the null terminated string named by
and stores the canonicalized absolute pathname in the buffer of size
The resulting path will have no symbolic link,
If there is no error,
returns a pointer to the
Otherwise it returns a NULL pointer, and the contents
of the array
are undefined. The global variable
is set to indicate the error.
Read or search permission was denied for a component of the path prefix.
is NULL. (In libc5 this would just cause a segfault.)
But, see NOTES below.
An I/O error occurred while reading from the file system.
Too many symbolic links were encountered in translating the pathname.
A component of a pathname exceeded
characters, or an entire pathname exceeded
The named file does not exist.
A component of the path prefix is not a directory.
The glibc implementation of
provides a non-standard extension.
is specified as NULL, then
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
Avoid using this function. It is broken by design since (unless
using the non-standard
resolved_path == NULL
feature) it is
impossible to determine a suitable size for the output buffer,
According to POSIX a buffer of size PATH_MAX suffices, but
PATH_MAX need not be a defined constant, and may have to be
does not really help, since on the one hand POSIX warns that
the result of
may be huge and unsuitable for mallocing memory. And on the other
may return -1 to signify that PATH_MAX is not bounded.
The libc4 and libc5 implementation contains a buffer overflow
(fixed in libc-5.4.13).
Thus, set-user-ID programs like mount need a private version.
function first appeared in 4.4BSD, contributed by Jan-Simon Pendry.
In Linux this function appears in libc 4.5.21.
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
A typical source fragment would be
(But see the BUGS section.)
path_max = PATH_MAX;
path_max = pathconf (path, _PC_PATH_MAX);
if (path_max <= 0)
path_max = 4096;
The 4.4BSD, Linux and SUSv2 versions always return an absolute
pathname. Solaris may return a relative pathname when the
argument is relative.
The prototype of
is given in <unistd.h> in libc4 and libc5,
but in <stdlib.h> everywhere else.
- RETURN VALUE
- CONFORMING TO
- SEE ALSO
linux.jgfs.net manual pages