Comrite Unix Man page/Perldoc/Info page, English-Chinese Dictionary, Chinese-English Dictionary

realpath

Command: man perldoc info search(apropos)  


 
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 references to '/./',
       '/../' and extra '/' characters in the null terminated string named  by
       path  and  stores  the canonicalized 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  indi-
       cate the error.

ERRORS
       EACCES Read or search permission was denied for a component 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 translating the
              pathname.

       ENAMETOOLONG
              A component of a path name exceeded NAME_MAX characters,  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
       Never  use this function. It is broken by design since it is impossible
       to determine a suitable size for the output buffer.  According to POSIX
       a  buffer of size PATH_MAX suffices, but PATH_MAX need not be a defined
       constant, and may have to be obtained  using  pathconf().   And  asking
       pathconf() does not really help, since on the one hand POSIX warns that
       the result of pathconf() may be huge and unsuitable for mallocing  mem-
       ory.  And  on  the  other hand pathconf() may return -1 to signify that
       PATH_MAX is not bounded.

       The libc4 and libc5 implementation contains a buffer overflow (fixed in
       libc-5.4.13).  Thus, suid programs like mount need a private version.

HISTORY
       The  realpath  function  first appeared in BSD 4.4, contributed 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  typi-
       cal 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.)

       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)
 

©2005 Comrite