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