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.

       The length of  the  output  buffer  should  have  been  an

       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