Документация по LinuxLinuxDoc.Ru 🔍

dirname, basename - обрабатывают элементы пути к файлу

НАЗВАНИЕ
dirname, basename - обрабатывают элементы пути к файлу

СИНТАКСИС

#include

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

ОПИСАНИЕ
dirname и basename разбивают путь к файлу (заканчивающийся
NULL) на каталоги и имя файла. Обычно, dirname возвращает
строку содержащую путь к файлу до последнего знака '/', а
basename возвращает строку содержащую часть после
последнего знака '/'. Последний знак '/' не считается
компонентом пути.

Если path не включает в себя слэш, то dirname возвращает
строку ".", а basename возвращает копию path. Если path
это строка из "/", то dirname и basename возвращают "/".
Если path нулевая строка или указывает на нее, то dirname
и basename возвращают строку ".".

Объеденив строки возвращаемые dirname, и basename можно
получить полный путь.

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

Ниже следует список примеров (SUSv2) показывающих строки
возвращаемые dirname и basename для различных путей:

path dirname basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr"
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."

ПРИМЕР

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);
free(dirc);
free(basec);

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функции dirname и basename возвращает указатели на строки
завершающиеся NULL.

НАЙДЕННЫЕ ОШИБКИ
В версиях glibc включая 2.2.1, dirname не правильно
обрабатывает пути оканчивающиеся на '/', и генерирует
нарушение элементов пути.

СООТВЕТСТВИЕ СТАНДАРТАМ
SUSv2
Читать новости Linux в Telegram
Linux - dirname, basename - обрабатывают элементы пути к файлу
Мы в соцсетях ✉