.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (C) 1999 Andries Brouwer (aeb@cwi.nl) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Rewritten old page, 990824, aeb@cwi.nl .\" 2004-12-14, mtk, added discussion of resolved_path == NULL .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH realpath 3 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ realpath \- возвращает канонизированный абсолютный путь .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP \fB#include \fP .PP \fBchar *realpath(const char *restrict \fP\fIpath\fP\fB,\fP \fB char *restrict \fP\fIresolved_path\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBrealpath\fP(): .nf .\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED _XOPEN_SOURCE >= 500 || /* glibc >= 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE .fi .SH ОПИСАНИЕ \fBrealpath\fP() expands all symbolic links and resolves references to \fI/./\fP, \fI/../\fP and extra \[aq]/\[aq] characters in the null\-terminated string named by \fIpath\fP to produce a canonicalized absolute pathname. The resulting pathname is stored as a null\-terminated string, up to a maximum of \fBPATH_MAX\fP bytes, in the buffer pointed to by \fIresolved_path\fP. The resulting path will have no symbolic link, \fI/./\fP or \fI/../\fP components. .PP .\" Even if we use resolved_path == NULL, then realpath() will still .\" return ENAMETOOLONG if the resolved pathname would exceed PATH_MAX .\" bytes -- MTK, Dec 04 Если значение \fIresolved_path\fP равно NULL, то \fBrealpath\fP() выделяет буфер размером \fBPATH_MAX\fP байт с помощью \fBmalloc\fP(3) для хранения полного пути и возвращает указатель на этот буфер. Вызывающий должен освободить буфер с помощью \fBfree\fP(3). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении \fBrealpath\fP() возвращает указатель на \fIresolved_path\fP. .PP При ошибках возвращается NULL, содержимое массива \fIresolved_path\fP не определено и в \fIerrno\fP указывается код ошибки. .SH ОШИБКИ .TP \fBEACCES\fP Запрещено чтение или поиск для компонента, содержащегося в пути. .TP \fBEINVAL\fP .\" (In libc5 this would just cause a segfault.) \fIpath\fP is NULL. (Before glibc 2.3, this error is also returned if \fIresolved_path\fP is NULL.) .TP \fBEIO\fP При чтении файловой системы произошла ошибка ввода\-вывода. .TP \fBELOOP\fP Во время определения pathname встретилось слишком много символьных ссылок. .TP \fBENAMETOOLONG\fP Компонент имени пути более \fBNAME_MAX\fP символов, или весь путь более \fBPATH_MAX\fP символов. .TP \fBENOENT\fP Указанный файл не существует. .TP \fBENOMEM\fP Не хватает памяти. .TP \fBENOTDIR\fP Компонент в префиксе пути не является каталогом. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBrealpath\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 .SH ВЕРСИИ .SS "Расширения GNU" Если вызов завершается с ошибкой \fBEACCES\fP или \fBENOENT\fP и значение \fIresolved_path\fP не равно NULL, то в \fIresolved_path\fP возвращается начало не читаемой или не существующей части \fIpath\fP. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ 4.4BSD, POSIX.1\-2001, Solaris. .PP В POSIX.1\-2001 сказано, что поведение при значении \fIresolved_path\fP равном NULL, зависит от реализации. В POSIX.1\-2008 определено поведение, аналогичное описанию на этой странице. .PP В 4.4BSD и Solaris максимальная длина пути равна \fBMAXPATHLEN\fP (находится в \fI\fP). В SUSv2 величины \fBPATH_MAX\fP и \fBNAME_MAX\fP представлены в \fI\fP или предоставляются функцией \fBpathconf\fP(3). Вот типичный фрагмент кода: .PP .in +4n .EX #ifdef PATH_MAX path_max = PATH_MAX; #else path_max = pathconf(path, _PC_PATH_MAX); if (path_max <= 0) path_max = 4096; #endif .EE .in .PP .\".PP .\" 2012-05-05, According to Casper Dik, the statement about .\" Solaris was not true at least as far back as 1997, and .\" may never have been true. .\" .\" The 4.4BSD, Linux and SUSv2 versions always return an absolute .\" pathname. .\" Solaris may return a relative pathname when the .\" .I path .\" argument is relative. .\" The prototype of .\" .BR realpath () .\" is given in \fI\fP in libc4 and libc5, .\" but in \fI\fP everywhere else. (Но смотрите раздел ДЕФЕКТЫ) .SH ДЕФЕКТЫ .\" .LP .\" The libc4 and libc5 implementation contained a buffer overflow .\" (fixed in libc-5.4.13). .\" Thus, set-user-ID programs like .\" .BR mount (8) .\" needed a private version. Стандартная версия этой функции POSIX.1\-2001 некорректна изначально, так как невозможно определить подходящий размер для буфера результата. В соответствии с POSIX.1\-2001 буфера размером \fBPATH_MAX\fP должно хватить, но \fBPATH_MAX\fP может не задаваться константой, а получаться через функцию \fBpathconf\fP(3). И запрос \fBpathconf\fP(3) особо не поможет, так как с одной стороны POSIX предупреждает, что результат \fBpathconf\fP(3) может быть слишком велик и не пригоден для выделения памяти. С другой стороны, \fBpathconf\fP(3) может возвратить \-1 для обозначения того, что \fBPATH_MAX\fP неограничен. Свойство \fIresolved_path\ ==\ NULL\fP, не стандартизованное в POSIX.1\-2001, но стандартизованное в POSIX.1\-2008, позволяет избежать этой проблемы проектирования. .SH "СМ. ТАКЖЕ" \fBrealpath\fP(1), \fBreadlink\fP(2), \fBcanonicalize_file_name\fP(3), \fBgetcwd\fP(3), \fBpathconf\fP(3), \fBsysconf\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан aereiae , Azamat Hackimov , Dmitriy S. Seregin , Katrin Kutepova , Lockal , Yuri Kozlov , Баринов Владимир и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .