Man page - realpath(3)

Packages contains this manual

Available languages:

en fr es ja ru ro de

Manual

realpath

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
АТРИБУТЫ
ВЕРСИИ
Расширения GNU
СТАНДАРТЫ
ИСТОРИЯ
ОШИБКИ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

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

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).

Image grohtml-608573-1.png

ВЕРСИИ

Расширения 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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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