basename dirname

basename

 

BASENAME

章节:Linux 程序员手册 (3)
更新:2009-03-30

到  易美翻译 翻译  本页

名字

basename, dirname - 解析路径名的构成

概要

#include <libgen.h>

char *dirname(char *path);

char *basename(char *path);

描述

警告:有两个不同的  basename() 函数 - 参考下面。

函数 dirname() 和 basename() 把空字符结尾的字符串分隔成目录和文件名的成分。通常情况下,dirname() 返回字符串中最后 '/' 之前但不包括它在内的字串,而 basename() 返回 '/' 之后的部分。结尾的 '/' 不作为路径名来处理。

如果 path 不包含一个斜杠,dirname 返回字符串 "." 而 basename() 返回 path 的一个复本。如果 path 是字符串 "/",那么 dirname() 和 basename() 都返回字符串 "/"。如果 path是空指针或指向一个空字符串,dirname() 和 basename() 都返回字符串 "."。

连接 dirname() 返回的字符串,一个 "/",和 basename() 返回字符串可以得到完整的路径。

dirname() 和 basename() 都可能更改 path 的内容,所以在调用这些函数之前可能需要复制并使用复本。

这些函数可能返回一个在随后调用被覆盖静态分配的内存。一个可选方案是,它们可以返回指向 path 某部分的指针,因此 path 引用的字符串不应该被更改或释放直到这些函数返回的指针不再使用为止。

下面的示例列表(来自 SUNSv2)展示了 dirname() 和 basename() 返回的路径不同部分:

path         dirname     basename
"/usr/lib"     "/usr"      "lib"
"/usr/"         "/"         "usr"
"usr"           "."         "usr"
"/"             "/"         "/"
"."             "."         "."
".."            "."         ".."

返回值

dirname() 和  basename() 都返回空字符结尾的字符串。(不要把这些指针传给  free(3)。)

遵循于

POSIX.1-2001.

注意

存在两个版本的  basename() - 上面描述的 POSIX 版本,以及下面讨论的 GNU 版本。
    #define _GNU_SOURCE /* 参考 feature_test_macros(7) */

#include <string.h>

GNU 版本绝不会更改它的参数,并且当  path 有一个结尾的斜杠时返回空串,就算是"/"也是如此。没有 GNU 版本的  dirname()。

在 glibc 里,如果包含了头文件 <libgen.h> 时使用 POSIX 版本的 basename(),其它情况使用 GNU 版本。

错误

在 glibc 实现 POSIX 版本的函数时,它们更改其参数,并且在调用使用诸如 "/usr/" 一个静态字符串时会出现段错误。在 glibc 2.2.1 之前,glibc 版本的  dirname() 没有正确处理以 '/' 字符结尾的路径名,并且在参数是 NULL 产生一个段错误。

示例

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);

参看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值