realpath
REALPATH(H)         Linux Programmer's Manual         REALPATH(H)



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 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  addi-
       tional  parameter, especially since pathconf(f) warns 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(k), getcwd(d), pathconf(f), sysconf(f)



                            1999-08-24                REALPATH(H)