table of contents
DIRNAME(3) | Linux Programmer's Manual | DIRNAME(3) |
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@users.sourceforge.net>
[中文版最新更新]¶
2003/05/13
《中國Linux論壇man手冊頁翻譯計劃》¶
跋¶
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
2000-12-14 | GNU |