DIRNAME(3)

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

СИНТАКСИС
#include <libgen.h>

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

СМ. ТАКЖЕ
dirname(1), basename(1),