NAME
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 是 NULL 指 针 或 指 向 空 串 , 则 dirname 和 basename 均 返 回 ".". 把 dirname 返 回 的 字 符 串 , "/", 和 basename 返 回 的 字 符 串 连 接 起 来 , 能 够 产 生 一 个 完 整 的 路 径 名 . 无 论 dirname 还 是 basename 都 有 可 能 更 改 path 的 内 容 , 因 此 如 果 需 要 保 护 原 有 路 径 名 , 应 该 传 送 副 本 作 为 参 数 . 此 外 , dirname 和 basename 返 回 的 指 针 可 能 指 向 一 块 静 态 分 配 的 内 存 , 会 被 下 次 调 用 覆 盖 . 下 面 的 例 子 (摘 自 SUSv2) 展 示 了 对 于 不 同 的 路 径 名 , dirname 和 basename 返 回 的 字 符 串 :
path |
||||||||
dirname |
basename | |||||||
"/usr/lib" |
"/usr" |
"lib" | ||||||
"/usr/" |
||||||||
"/" |
"usr" | |||||||
"usr" |
||||||||
"." |
"usr" | |||||||
"/" |
||||||||
"/" |
"/" | |||||||
"." |
||||||||
"." |
"." | |||||||
".." |
||||||||
"." |
".." |
示 例 (EXAMPLE)
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);
返 回 值 (RETURN VALUE)
dirname 和 basename 均 返 回 以 null 结 尾 的 字 符 串 的 指 针 .
BUGS
在 glibc 的 各 个 版 本 中 , 直 到 (并 包 括 ) 2.2.1, dirname 无 法 正 确 处 理 以 ’/’ 字 符 结 尾 的 路 径 名 . 如 果 参 数 是 NULL 指 针 , 他 还 会 产 生 段 冲 突 (segmentation violation).
遵 循 (CONFORMING TO)
SUSv2
另 见 (SEE ALSO)
[中 文 版 维 护 人 ]
徐 明 <xuming [AT] users.net>
[中 文 版 最 新 更 新 ]
2003/05/13
《 中 国 Linux论 坛 man手 册 页 翻 译 计 划 》
跋
本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh