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)