realpath (3)


       realpath - return the canonicalized absolute pathname


       #include <limits.h>
       #include <stdlib.h>

       char *realpath(const char *path, char *resolved_path);


       realpath  expands  all symbolic links and resolves references to '/./',
       '/../' and extra '/' characters in the null terminated string named  by
       path  and  stores  the canonicalized absolute pathname in the buffer of
       size PATH_MAX named by resolved_path.  The resulting path will have  no
       symbolic link, '/./' or '/../' components.


       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  indi-
       cate the error.


       EACCES Read or search permission was denied for a component of the path

       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 translating the

              A component of a path name exceeded NAME_MAX characters,  or  an
              entire path name exceeded PATH_MAX characters.

       ENOENT The named file does not exist.

              A component of the path prefix is not a directory.


       The libc4 and libc5 implementation contains a buffer overflow (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 additional  parame-
       ter,  especially  since pathconf(3) warns that the result of pathconf()
       may be huge and unsuitable for mallocing memory.


       The realpath function first appeared in BSD 4.4,  contributed  by  Jan-
       Simon Pendry.  In Linux this function appears in libc 4.5.21.
                path_max = pathconf (path, _PC_PATH_MAX);
                if (path_max <= 0)
                  path_max = 4096;

       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.


       readlink(2), getcwd(3), pathconf(3), sysconf(3)

                                  1999-08-24                       realpath(3)