dwww Home | Manual pages | Find package

realpath(3)                 Library Functions Manual                realpath(3)

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 path-
       name 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 path-
              name.

       ENAMETOOLONG
              A component of a pathname exceeded NAME_MAX characters, or an en-
              tire 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.

HISTORY
       4.4BSD, POSIX.1-2001, Solaris.

       POSIX.1-2001  says  that the behavior if resolved_path is NULL is imple-
       mentation-defined.  POSIX.1-2008 specifies  the  behavior  described  in
       this page.

       In  4.4BSD  and  Solaris, the limit on the pathname length is MAXPATHLEN
       (found in <sys/param.h>).  SUSv2 prescribes PATH_MAX  and  NAME_MAX,  as
       found  in <limits.h> or provided by the pathconf(3) 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

       (But see the BUGS section.)

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 path-
       conf(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 prob-
       lem to be avoided.

SEE ALSO
       realpath(1), readlink(2),  canonicalize_file_name(3),  getcwd(3),  path-
       conf(3), sysconf(3)

Linux man-pages 6.9.1              2024-05-02                       realpath(3)

Generated by dwww version 1.16 on Tue Dec 16 04:28:05 CET 2025.