函数dirname()和basename()将以null结尾的路径名字符串分解为目录和文件名组件.在通常情况下,dirname()返回字符串,但不包括最后的'/',basename()返回最后的'/'后面的组件.尾随'/'字符不计入路径名的一部分.
后来,你有这个小桌子:
path dirname basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr" // wat?
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."
Run Code Online (Sandbox Code Playgroud)
为什么要dirname( "/usr/")回来"/"而不是"/usr"?
手册中的句子告诉我,我应该得到/usr结果.
我在虚拟程序中测试了实际结果,它的行为就像手册所说的那样.
#include <libgen.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
const char *mydir="/usr/";
char *dummy = strdup( mydir );
char *dummy2 = strdup( mydir );
char *dname = dirname( dummy );
char *bname = basename( dummy2 );
printf("mydir: '%s', dname: '%s', bname: '%s'\n", mydir, dname, bname);
free( dummy );
free( dummy2 );
return 0;
}
$ ./test
mydir: '/usr/', dname: '/', bname: 'usr'
Run Code Online (Sandbox Code Playgroud)
现在,我期望的是:
path dirname basename
"/usr/" "/usr" "" // more consistent?
Run Code Online (Sandbox Code Playgroud)
那么......有谁知道这里发生了什么?
chi*_*ill 14
尾随'/'字符不计入路径名的一部分.
因此"/ usr /"与"/ usr"相同,后者可能表示目录中的文件或名称(目录条目名称)usr的目录/.该函数dirname返回路径的父目录.父目录/usr是/.似乎完全一致.