REALPATH(3) Library Functions Manual REALPATH(3)

realpathresolve a pathname


#include <stdlib.h>

char *realpath(const char *restrict file_name,
       char *restrict resolved_name);

The realpath () function shall derive, from the pathname pointed to by file_name, an absolute pathname that resolves to the same directory entry, whose resolution does not involve ‘’., ‘..’, or symbolic links. If resolved_name is a null pointer, the generated pathname shall be stored as a null-terminated string in a buffer allocated as if by a call to malloc(3). Otherwise, if {PATH_MAX} is defined as a constant in the <limits.h> header, then the generated pathname shall be stored as a null-terminated string, up to a maximum of {PATH_MAX} bytes, in the buffer pointed to by resolved_name.

If resolved_name is not a null pointer and {PATH_MAX} is not defined as a constant in the <limits.h> header, the behavior is undefined.

Upon successful completion, realpath () shall return a pointer to the buffer containing the resolved name. Otherwise, realpath () shall return a null pointer and set to indicate the error.

If the resolved_name argument is a null pointer, the pointer returned by realpath () can be passed to free(3).

If the resolved_name argument is not a null pointer and the realpath () function fails, the contents of the buffer pointed to by resolved_name are undefined.

The realpath () function shall fail if:

Search permission was denied for a component of the path prefix of file_name .
The file_name argument is a null pointer.
An error occurred while reading from the file system.
A loop exists in symbolic links encountered during resolution of the file_name argument.
The length of a component of a pathname is longer than {NAME_MAX}.
A component of file_name does not name an existing file or file_name points to an empty string.
A component of the path prefix names an existing file that is neither a directory nor a symbolic link to a directory, or the file_name argument contains at least one non- <slash> character and ends with one or more trailing <slash> characters and the last pathname component names an existing file that is neither a directory nor a symbolic link to a directory.

The realpath () function may fail if:

The file_name argument does not begin with a <slash> and none of the symbolic links (if any) processed during pathname resolution of file_name had contents that began with a <slash>, and either search permission was denied for the current directory or read or search permission was denied for a directory above the current directory in the file hierarchy.
More than {SYMLOOP_MAX} symbolic links were encountered during resolution of the file_name argument.
The length of a pathname exceeds {PATH_MAX}, or pathname resolution of a symbolic link produced an intermediate result with a length that exceeds {PATH_MAX}.
Insufficient storage space is available.

The following example generates an absolute pathname for the file identified by the argument. The generated pathname is stored in the buffer pointed to by .

#include <stdlib.h>
...
char *symlinkpath = "/tmp/symlink/file";
char *actualpath;


actualpath = realpath(symlinkpath, NULL);
if (actualpath != NULL)
{
    ... use actualpath ...


    free(actualpath);
}
else
{
    ... handle error ...
}

For functions that allocate memory as if by malloc(3), the application should release such memory when it is no longer required by a call to free(3). For realpath (), this is the return value.

Since realpath () has no argument, if {PATH_MAX} is not defined as a constant in <limits.h>, applications have no way of determining how large a buffer they need to allocate for it to be safe to pass to realpath (). A {PATH_MAX} value obtained from a prior pathconf(3) call is out-of-date by the time realpath () is called. Hence the only reliable way to use realpath () when {PATH_MAX} is not defined in <limits.h> is to pass a null pointer for resolved_name so that realpath () will allocate a buffer of the necessary size.

None.

fpathconf(3), free(3), getcwd(3), sysconf(3)

XBD <limits.h>, <stdlib.h>

First released in Issue 4, Version 2.

Moved from X/OPEN UNIX extension to BASE.

The keyword is added to the realpath () prototype for alignment with the ISO/IEC 9899:1999 (“ISO C99”) standard.

The wording of the mandatory [ELOOP] error condition is updated, and a second optional [ELOOP] error condition is added.

IEEE Std 1003.1-2001 (“POSIX.1”)/Cor 1-2002, item XSH/TC1/D6/51 is applied, adding new text to the DESCRIPTION for the case when resolved_name is a null pointer, changing the [EINVAL] error text, adding text to the RATIONALE, and adding text to FUTURE DIRECTIONS.

IEEE Std 1003.1-2001 (“POSIX.1”)/Cor 2-2004, item XSH/TC2/D6/110 is applied, updating the ERRORS section to refer to the file_name argument, rather than a nonexistent argument.

Austin Group Interpretation 1003.1-2001 #143 is applied.

This function is updated for passing a null pointer to realpath () for the resolved_name argument.

The APPLICATION USAGE section is updated to clarify that memory is allocated as if by malloc(3).

POSIX.1-2008, Technical Corrigendum 1, XSH/TC1-2008/0499 [353], XSH/TC1-2008/0500 [324], and XSH/TC1-2008/0501 [353] are applied.

January 1, 2016 posix.fail