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