一、getname函数的定义
char *getname(const char *path);
getname函数的作用是从路径中提取文件名,并以字符串形式返回。函数的参数path是指文件路径。
二、getname函数的用法
使用getname函数需要引用头文件<libgen.h>
。
#include <stdio.h>
#include <libgen.h>
int main(){
char path[] = "/home/user/example.txt";
char *name = getname(path);
printf("The file name is: %s\n", name);
return 0;
}
运行结果:
The file name is: example.txt
getname函数返回的字符串指针指向的内存空间是在函数内部动态分配的,使用完毕后需要手动释放。
char *name = getname(path);
//...
free(name);
三、getname函数的实现原理
getname函数的实现原理比较简单,可以通过查看头文件<libgen.h>
中的源码得出。
/* Return the last component of PATH. */
extern char *getname (__const char *__path) __THROW;
getname函数的本质是调用了一个叫做basename的函数。
/* Return the last component of the file name in PATH. */
char *
basename (const char *path)
{
const char *base = strrchr (path, '/');
return base ? (char *) base + 1 : (char *) path;
}
basename函数也是一个用于提取文件名的函数,其实现原理也很简单:先在路径中查找最后一个斜杠字符(/),如果找到了则将其后面的部分返回;如果没有找到则将整个路径返回。
四、getname函数的应用场景
getname函数可以用于很多场合,例如需要获取文件名进行操作时。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libgen.h>
void rename_file(const char *path, const char *new_name){
char *dir = dirname(path);
char *name = getname(path);
int len = strlen(dir) + strlen(new_name) + 2;
char *new_path = (char *)malloc(sizeof(char) * len);
sprintf(new_path, "%s/%s", dir, new_name);
rename(path, new_path);
free(name);
free(dir);
free(new_path);
}
int main(){
char path[] = "/home/user/example.txt";
char new_name[] = "new_example.txt";
rename_file(path, new_name);
return 0;
}
rename_file函数可以将路径为path的文件重命名为new_name。该函数先调用dirname函数提取文件的路径,然后再调用getname函数提取文件名,最后将文件路径与新文件名组合成新的文件路径进行重命名。
五、getname函数的注意事项
在使用getname函数时需要注意以下几点:
- getname函数只能用于提取文件名,不适用于提取目录名。
- getname函数对于文件名中不同平台上不同的路径分隔符处理不一定一致,建议事先对路径进行统一处理。
- getname函数返回的字符串指针指向的内存空间是在函数内部动态分配的,使用完毕后需要手动释放。