Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Стандартная библиотека языка C (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  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

ВЕРСИИ

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

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       4.4BSD, POSIX.1-2001, Solaris.

       В 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

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

ОШИБКИ

       Стандартная версия этой функции  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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                      realpath(3)