Provided by:
manpages-zh_1.5.1-1_all 
NAME
dirname, basename - 分析路徑成
` (SYNOPSIS)
#include <libgen.h>
char *dirname(char *path);
char *basename(char *path);
yz (DESCRIPTION)
dirname 和 basename 把 以 null 結尾 的 路徑名 分解為 目錄 和 檔名.
一般情況下, dirname 返回 路徑名 的 前掖﹞, 直到 (但不包括) 最後一
'/', 而 basename 則 返回 最後一 '/' 後 的 內容. 如果 路徑名 以 '/'
結尾, 該 '/' 被認為 不是 路徑名 的 一部分.
如果 路徑名 path 不包含 斜槓 '/', dirname 返回 字符串 ".", 而 basename
返回 path 的 副本. 如果 路徑名 path 是 "/", 則 dirname 和 basename 均
返回 "/". 如果 路徑名 path 是 NULL 指針 或 指向 空串, 則 dirname 和
basename 均 返回 ".".
把 dirname 返回的 字符串, "/", 和 basename 返回的 字符串 連接 起來,
能夠 產生 一 完整 的 路徑名.
無論 dirname 還是 basename 都 有可能 更改 path 的 內容, 因此 如果 需n
保護 鴞 路徑名, 應該 傳送 副本 作為 參數. 此外, 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
t (SEE ALSO)
dirname(1), basename(1)
[]
} <xuming@users.sourceforge.net>
[]
2003/05/13
mLinuxanhttp://cmpp.linuxforum.net