realpath

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
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
       Never use this function. It is broken by design since it is impossible
       to determine a suitable size for	 the  output  buffer.	According  to
       POSIX  a	 buffer of size PATH_MAX suffices, but PATH_MAX need not be a
       defined constant, and may have to be obtained using  pathconf().	  And
       asking  pathconf()  does	 not really help, since on the one hand POSIX
       warns that the result of pathconf() may be  huge	 and  unsuitable  for
       mallocing  memory.  And	on the other hand pathconf() may return -1 to
       signify that PATH_MAX is not bounded.

       The libc4 and libc5 implementation contains a buffer  overflow  (fixed
       in  libc-5.4.13).   Thus, suid programs like mount need a private ver-
       sion.

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
       (But see the BUGS section.)

       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)