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