Manpages

NAME

dirname, basename - 解 析 路 径 组 成 部 分

总 览

#include <libgen.h>

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

描 述

dirnamebasename 把 以 null 结 尾 的 路 径 名 分 解 为 目 录 和 文 件 名 . 一 般 情 况 下 , dirname 返 回 路 径 名 的 前 面 部 分 , 直 到 (但 不 包 括 ) 最 后 一 个 ’/’, 而 basename 则 返 回 最 后 一 个 ’/’ 后 面 的 内 容 . 如 果 路 径 名 以 ’/’ 结 尾 , 该 ’/’ 被 认 为 不 是 路 径 名 的 一 部 分 . 如 果 路 径 名 path 不 包 含 斜 杠 ’/’, dirname 返 回 字 符 串 ".", 而 basename 返 回 path 的 副 本 . 如 果 路 径 名 path 是 "/", 则 dirnamebasename 均 返 回 "/". 如 果 路 径 名 path 是 NULL 指 针 或 指 向 空 串 , 则 dirnamebasename 均 返 回 ".". 把 dirname 返 回 的 字 符 串 , "/", 和 basename 返 回 的 字 符 串 连 接 起 来 , 能 够 产 生 一 个 完 整 的 路 径 名 . 无 论 dirname 还 是 basename 都 有 可 能 更 改 path 的 内 容 , 因 此 如 果 需 要 保 护 原 有 路 径 名 , 应 该 传 送 副 本 作 为 参 数 . 此 外 , dirnamebasename 返 回 的 指 针 可 能 指 向 一 块 静 态 分 配 的 内 存 , 会 被 下 次 调 用 覆 盖 . 下 面 的 例 子 (摘 自 SUSv2) 展 示 了 对 于 不 同 的 路 径 名 , dirnamebasename 返 回 的 字 符 串 :

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)

dirnamebasename 均 返 回 以 null 结 尾 的 字 符 串 的 指 针 .

BUGS

在 glibc 的 各 个 版 本 中 , 直 到 (并 包 括 ) 2.2.1, dirname 无 法 正 确 处 理 以 ’/’ 字 符 结 尾 的 路 径 名 . 如 果 参 数 是 NULL 指 针 , 他 还 会 产 生 段 冲 突 (segmentation violation).

遵 循 (CONFORMING TO)

SUSv2

另 见 (SEE ALSO)

dirname(1), basename(1)

[中 文 版 维 护 人 ]

徐 明 <xuming [AT] users.net>

[中 文 版 最 新 更 新 ]

2003/05/13

《 中 国 Linux论 坛 man手 册 页 翻 译 计 划 》

http://cmpp.linuxforum.net

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh