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

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

       basename, dirname - разделяет путь на компоненты

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <libgen.h>

       char *dirname(char *path);
       char *basename(char *path);

ОПИСАНИЕ

       Warning: there are two different functions basename(); see below.

       The  functions  dirname()   and  basename()   break  a null-terminated pathname string into directory and
       filename components.  In the usual case, dirname()  returns the string up  to,  but  not  including,  the
       final  '/',  and  basename()  returns the component following the final '/'.  Trailing '/' characters are
       not counted as part of the pathname.

       Если path не содержит косую черту, то dirname() возвращает строку  «.»,  а  basename()  возвращает  копию
       path.  Если  строка  path  равна «/», то dirname() и basename() возвращают строку «/». Если значение path
       равно указателю null или указывает на пустую строку, то dirname() и basename() возвращают строку «.».

       Если объединить строку, возвращаемую dirname(), «/»  и  строку,  возвращаемую  basename(),  то  получится
       первоначальный путь.

       Функции dirname() и basename() могут изменить содержимое path, поэтому желательно передавать копию строки
       при их вызове.

       Данные  функции  могут возвращать указатели на статически выделенную память, которая может измениться при
       последующих вызовах. Или же они могут возвращать указатель на часть  path,  поэтому  строка,  на  которую
       ссылается path, не должна изменяться или освобождаться до тех пор, пока указатель, возвращаемый функцией,
       станет ненужным.

       В  следующих примерах (взяты из SUSv2) показаны строки, возвращаемые dirname() и basename() для различных
       путей:
              путь       dirname   basename
              /usr/lib   /usr      lib
              /usr/      /         usr
              usr        .         usr
              /          /         /
              .          .         .
              ..         .         ..

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

       Функции dirname() и basename() возвращают указатели на строки, оканчивающиеся null  (не  передавайте  эти
       указатели free(3)).

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌─────────────────────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ ИнтерфейсАтрибутЗначение │
       ├─────────────────────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │ basename(), dirname()                                               │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

ВЕРСИИ

       Существует  две различные версии basename() — версия POSIX, описанная выше, и версия GNU, которая описана
       далее

               #define _GNU_SOURCE         /* смотрите feature_test_macros(7) */
           #include <string.h>

       Версия GNU никогда не изменяет свои аргументы и возвращает пустую строку, если path оканчивается символом
       косой черты, а в частности, если значение равно «/». Версии GNU для dirname() не существует.

       Если в исходный код включён файл <libgen.h>, то из glibc  используется  версия  basename(),  описанная  в
       POSIX, иначе — версия GNU.

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001.

ОШИБКИ

       Функции  версии  POSIX,  реализованные в glibc, изменяют аргумент path, что приводит к ошибки сегментации
       при их вызове со статической строкой вида «/usr/».

       Before glibc 2.2.1, the glibc version of dirname()  did not correctly handle pathnames with trailing  '/'
       characters, and generated a segfault if given a NULL argument.

ПРИМЕРЫ

       Следующий пример кода демонстрирует использование basename() и dirname():
           char *dirc, *basec, *bname, *dname;
           char *path = "/etc/passwd";

           dirc = strdup(path);
           basec = strdup(path);
           dname = dirname(dirc);
           bname = basename(basec);
           printf("dirname=%s, basename=%s\n", dname, bname);

СМОТРИТЕ ТАКЖЕ

       basename(1), dirname(1)

ПЕРЕВОД

       Русский  перевод  этой  страницы руководства разработал(и) Artyom Kunyov <artkun@guitarplayer.ru>, Azamat
       Hackimov <azamat.hackimov@gmail.com>, Dmitriy  Ovchinnikov  <dmitriyxt5@gmail.com>,  Dmitry  Bolkhovskikh
       <d20052005@yandex.ru>,  ITriskTI  <ITriskTI@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                  15 июня 2024 г.                                     basename(3)