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 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(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, 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) 1999-08-24 REALPATH(3)