getname函数详解

发布时间:2023-05-21

一、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函数时需要注意以下几点:

  1. getname函数只能用于提取文件名,不适用于提取目录名。
  2. getname函数对于文件名中不同平台上不同的路径分隔符处理不一定一致,建议事先对路径进行统一处理。
  3. getname函数返回的字符串指针指向的内存空间是在函数内部动态分配的,使用完毕后需要手动释放。