通过系统调用basename(), dirname()得到当前路径下的文件名和目录名

来源:互联网 发布:淘宝买家秀百度云 编辑:程序博客网 时间:2024/05/16 18:16

问题提出:

最近小组的小伙伴们都在写my_ls,myshell, 可能经常会遇到这样的问题, 需要得到当前路径下的文件名
比如当前绝对路径:/home/dela/dela_c, 现在想得到dela_c怎么办, 反正我在实现这个问题的时候费了一番功夫
现在跟小伙伴们分享一个很简单的方法, 就是:basename和dirname系统调用!!!

函数声明


头文件: #include<libgen.h>
函数声明: char *dirname(char *path);
char * basename(char *path);

函数用法


basename(): 截取path中的去目录部分的最后的文件名
dirname(): 截取path中的目录路径名

成功将返回文件名或目录名, 失败返回NULL

程序示例:

#include<stdio.h>#include<libgen.h>#include<unistd.h>#include<string.h>#include<dirent.h>int main(int argc,char *argv[]){    char path[PATH_MAX] = {0};    char filename[NAME_MAX] = {0};    char thisDirname[PATH_MAX] = {0};    strcpy(path, getcwd(NULL, 0));    strcpy(filename, basename(path));    strcpy(thisDirname, dirname(path));    printf("%s\n", filename);    printf("%s\n", thisDirname);    return 0;}

运行结果:

[dela@server1 dela_c]$ gcc get_dirname_and_filename.c [dela@server1 dela_c]$ ./a.outdela_c/home/dela

程序说明:
通过getcwd()系统调用得到了当前工作目录: /home/dela/dela_c, 然后将当前工作目录存到path中, 然后将path当作参数传给basename()和dirname()
这样就可以得到当前工作文件为:dela_c, 当前工作文件的目录名:/home/dela
真是两个好用到哭的系统调用~害羞


1 0