ABCDEFGHIJKLMNOPQRSTUVWXYZ

realpath

REALPATH(3)                Linux Programmer's Manual               REALPATH(3)



NAME
       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 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.

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

ERRORS
       EACCES Read or search permission was denied for a component 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 translating the
              pathname.

       ENAMETOOLONG
              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.

       ENOTDIR
              A component of the path prefix is not a directory.

BUGS
       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.

HISTORY
       The realpath function first appeared in BSD 4.4,  contributed  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 typi-
       cal 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)



                                  1999-08-24                       REALPATH(3)