# realpath

## NAME



           realpath - return the canonicalized absolute pathname
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <limits.h>**
           **#include <stdlib.h>**
    
           **char *realpath(const char *restrict** _path_**,**
                          **char *restrict** _resolved_path_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **realpath**():
               _XOPEN_SOURCE >= 500
                   || /* glibc >= 2.19: */ _DEFAULT_SOURCE
                   || /* glibc <= 2.19: */ _BSD_SOURCE
    


## DESCRIPTION



           **realpath**() expands all symbolic links and resolves references to
           _/./_ , _/../_ and extra '/' characters in the null-terminated string
           named by _path_ to produce a canonicalized absolute pathname.  The
           resulting pathname is stored as a null-terminated string, up to a
           maximum of **PATH_MAX** bytes, in the buffer pointed to by
           _resolved_path_.  The resulting path will have no symbolic link, _/./_
           or _/../_ components.
    
           If _resolved_path_ is specified as NULL, then **realpath**() uses
           malloc(3) to allocate a buffer of up to **PATH_MAX** bytes to hold the
           resolved pathname, and returns a pointer to this buffer.  The
           caller should deallocate this buffer using free(3).
    


## RETURN VALUE



           If there is no error, **realpath**() returns a pointer to the
           _resolved_path_.
    
           Otherwise, it returns NULL, the contents of the array
           _resolved_path_ are undefined, and _errno_ is set to indicate the
           error.
    


## ERRORS



           **EACCES** Read or search permission was denied for a component of the
                  path prefix.
    
           **EINVAL** _path_ is NULL.  (Before glibc 2.3, this error is also
                  returned if _resolved_path_ is NULL.)
    
           **EIO** An I/O error occurred while reading from the filesystem.
    
           **ELOOP** Too many symbolic links were encountered in translating the
                  pathname.
    
           **ENAMETOOLONG**
                  A component of a pathname exceeded **NAME_MAX** characters, or
                  an entire pathname exceeded **PATH_MAX** characters.
    
           **ENOENT** The named file does not exist.
    
           **ENOMEM** Out of memory.
    
           **ENOTDIR**
                  A component of the path prefix is not a directory.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **realpath**()                           │ Thread safety │ MT-Safe │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## VERSIONS



       **GNU extensions**
           If the call fails with either **EACCES** or **ENOENT** and _resolved_path_
           is not NULL, then the prefix of _path_ that is not readable or does
           not exist is returned in _resolved_path_.
    


## STANDARDS



           POSIX.1-2008.
    


## BUGS



           The POSIX.1-2001 standard version of this function is broken by
           design, since it is impossible to determine a suitable size for
           the output buffer, _resolved_path_.  According to POSIX.1-2001 a
           buffer of size **PATH_MAX** suffices, but **PATH_MAX** need not be a
           defined constant, and may have to be obtained using pathconf(3).
           And asking pathconf(3) does not really help, since, on the one
           hand POSIX warns that the result of pathconf(3) may be huge and
           unsuitable for mallocing memory, and on the other hand pathconf(3)
           may return -1 to signify that **PATH_MAX** is not bounded.  The
           _resolved_path == NULL_ feature, not standardized in POSIX.1-2001,
           but standardized in POSIX.1-2008, allows this design problem to be
           avoided.
    


* * *