Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       realpath - возвращает канонизированный абсолютный путь

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <limits.h>
       #include <stdlib.h>

       char *realpath(const char *restrict path,
                      char *restrict resolved_path);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       realpath():
           _XOPEN_SOURCE >= 500
               || /* glibc >= 2.19: */ _DEFAULT_SOURCE
               || /* glibc <= 2.19: */ _BSD_SOURCE

ОПИСАНИЕ

       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.

       Если  значение  resolved_path  равно  NULL, то realpath() выделяет буфер размером PATH_MAX
       байт с помощью malloc(3) для хранения полного пути и возвращает указатель на  этот  буфер.
       Вызывающий должен освободить буфер с помощью free(3).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении realpath() возвращает указатель на resolved_path.

       При  ошибках  возвращается  NULL, содержимое массива resolved_path не определено и в errno
       указывается код ошибки.

ОШИБКИ

       EACCES Запрещено чтение или поиск для компонента, содержащегося в пути.

       EINVAL path is NULL.  (Before glibc 2.3, this error is also returned if  resolved_path  is
              NULL.)

       EIO    При чтении файловой системы произошла ошибка ввода-вывода.

       ELOOP  Во время определения pathname встретилось слишком много символьных ссылок.

       ENAMETOOLONG
              Компонент  имени  пути  более  NAME_MAX  символов,  или  весь  путь  более PATH_MAX
              символов.

       ENOENT Указанный файл не существует.

       ENOMEM Не хватает памяти.

       ENOTDIR
              Компонент в префиксе пути не является каталогом.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │realpath()                                             │ Безвредность в нитях │ MT-Safe  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       4.4BSD, POSIX.1-2001.

       В POSIX.1-2001 сказано, что поведение при значении resolved_path равном NULL,  зависит  от
       реализации. В POSIX.1-2008 определено поведение, аналогичное описанию на этой странице.

ЗАМЕЧАНИЯ

       В 4.4BSD и Solaris максимальная длина пути равна MAXPATHLEN (находится в <sys/param.h>). В
       SUSv2 величины PATH_MAX и NAME_MAX представлены в <limits.h> или предоставляются  функцией
       pathconf(3). Вот типичный фрагмент кода:

           #ifdef PATH_MAX
             path_max = PATH_MAX;
           #else
             path_max = pathconf(path, _PC_PATH_MAX);
             if (path_max <= 0)
               path_max = 4096;
           #endif

       (Но смотрите раздел ДЕФЕКТЫ)

   Расширения GNU
       Если вызов завершается с ошибкой EACCES или ENOENT и значение resolved_path не равно NULL,
       то в resolved_path возвращается начало не читаемой или не существующей части path.

ДЕФЕКТЫ

       Стандартная версия этой функции POSIX.1-2001 некорректна изначально,  так  как  невозможно
       определить  подходящий  размер для буфера результата. В соответствии с POSIX.1-2001 буфера
       размером PATH_MAX должно хватить, но PATH_MAX может не задаваться константой, а получаться
       через  функцию pathconf(3). И запрос pathconf(3) особо не поможет, так как с одной стороны
       POSIX предупреждает, что результат pathconf(3) может быть слишком велик и не пригоден  для
       выделения  памяти. С другой стороны, pathconf(3) может возвратить -1 для обозначения того,
       что  PATH_MAX  неограничен.  Свойство  resolved_path == NULL,   не   стандартизованное   в
       POSIX.1-2001,  но  стандартизованное  в  POSIX.1-2008,  позволяет  избежать  этой проблемы
       проектирования.

СМ. ТАКЖЕ

       realpath(1), readlink(2), canonicalize_file_name(3), getcwd(3), pathconf(3), sysconf(3)

ПЕРЕВОД

       Русский перевод этой страницы руководства был сделан aereiae  <aereiae@gmail.com>,  Azamat
       Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Katrin Kutepova
       <blackkatelv@gmail.com>, Lockal <lockalsash@gmail.com>, Yuri Kozlov  <yuray@komyakino.ru>,
       Баринов Владимир и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.