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