realpath - return the canonicalized absolute pathname
SYNOPSIS
#include <limits.h>
#include <stdlib.h>
char *realpath(const char *path, char *resolved_path);
DESCRIPTION
realpath expands all symbolic links and resolves refer
ences to '/./', '/../' and extra '/' characters in the
null terminated string named by path and stores the canon
icalized absolute pathname in the buffer of size PATH_MAX
named by resolved_path. The resulting path will have no
symbolic link, '/./' or '/../' components.
RETURN VALUE
If there is no error, it returns a pointer to the
resolved_path.
Otherwise it returns a NULL pointer, and the contents of
the array resolved_path are undefined. The global variable
errno is set to indicate the error.
ERRORS
EACCES Read or search permission was denied for a compo
nent of the path prefix.
EINVAL Either path or resolved_path is NULL. (In libc5
this would just cause a segfault.)
EIO An I/O error occurred while reading from the file
system.
ELOOP Too many symbolic links were encountered in trans
lating the pathname.
ENAMETOOLONG
A component of a path name exceeded NAME_MAX char
acters, or an entire path name exceeded PATH_MAX
characters.
ENOENT The named file does not exist.
ENOTDIR
A component of the path prefix is not a directory.
BUGS
The libc4 and libc5 implementation contains a buffer over
flow (fixed in libc-5.4.13). Thus, suid programs like
mount need a private version.
that the result of pathconf() may be huge and unsuitable
for mallocing memory.
HISTORY
The realpath function first appeared in BSD 4.4, con
tributed by Jan-Simon Pendry. In Linux this function
appears in libc 4.5.21.
CONFORMING TO
In BSD 4.4 and Solaris the limit on the pathname length is
MAXPATHLEN (found in <sys/param.h>). The SUSv2 prescribes
PATH_MAX and NAME_MAX, as found in <limits.h> or provided
by the pathconf() function. A typical source fragment
would be
#ifdef PATH_MAX
path_max = PATH_MAX;
#else
path_max = pathconf (path, _PC_PATH_MAX);
if (path_max <= 0)
path_max = 4096;
#endif
The BSD 4.4, Linux and SUSv2 versions always return an
absolute path name. Solaris may return a relative path
name when the path argument is relative. The prototype of
realpath is given in <unistd.h> in libc4 and libc5, but in
<stdlib.h> everywhere else.
SEE ALSO
readlink(2), getcwd(3), pathconf(3), sysconf(3)
Man(1) output converted with
man2html