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

ИМЯ
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
или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо
на man-pages-ru-talks@lists.sourceforge.net.
Linux man-pages 6.03 5 февраля 2023 г. realpath(3)