BASENAME - Linux手册页
Linux程序员手册 第3部分
更新日期: 2020-06-09
名称
basename,dirname-解析路径名组件
语法
#include <libgen.h> char *dirname(char *path); char *basename(char *path);
说明
警告:有两个不同的函数basename()-参见下文。
函数dirname()和basename()将以null终止的路径名字符串分成目录和文件名组件。在通常情况下,dirname()返回直到但不包括最终aq / aq的字符串,而basename()返回最终aq / aq之后的组件。结尾的aq / aq字符不算作路径名的一部分。
如果path不包含斜杠,则dirname()返回字符串"。"而basename()返回path的副本。如果path是字符串" /",则dirname()和basename()都返回字符串" /"。如果path是空指针或指向空字符串,则dirname()和basename()均返回字符串"。"。
将dirname()返回的字符串," /"和basename()返回的字符串连接起来,会得到一个完整的路径名。
dirname()和basename()都可以修改path的内容,因此在调用这些函数之一时可能希望传递副本。
这些函数可以将指针返回到静态分配的内存,该内存可能被后续调用覆盖。或者,它们可以将指针返回到路径的某些部分,以便在不再需要函数返回的指针之前,不应修改或释放路径所指的字符串。
以下示例列表(取自SUSv2)显示了dirname()和basename()返回的不同路径的字符串:
- 路径dirnamebasename / usr / lib / usrlib / usr / / usr usr .usr // 。 .. .. ...
返回值
dirname()和basename()都返回指向以null结尾的字符串的指针。 (不要将这些指针传递给free(3)。)
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
basename(),dirname() | Thread safety | MT-Safe |
遵循规范
POSIX.1-2001,POSIX.1-2008。
备注
basename()有两种不同的版本-上面描述的POSIX版本和GNU版本,其中一种
#define _GNU_SOURCE /* See feature_test_macros(7) */ #include <string.h>
GNU版本从不修改其参数,并且当path带有斜杠时,尤其是当它是" /"时,返回空字符串。没有dirname()的GNU版本。
使用glibc时,如果包含basename(),则会获取POSIX版本,否则,将获取GNU版本。
BUGS
在glibc实现中,这些函数的POSIX版本会修改path参数,并在使用诸如" / usr /"之类的静态字符串调用时进行segfault。
在glibc 2.2.1之前,dirname()的glibc版本未正确处理带有尾随aq / aq字符的路径名,如果给定NULL参数,则会生成段错误。
示例
以下代码片段演示了basename()和dirname()的用法:
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);
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。