问题提出:
最近小组的小伙伴们都在写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.out
dela_c
/home/dela
程序说明:
通过getcwd()系统调用得到了当前工作目录: /home/dela/dela_c, 然后将当前工作目录存到path中, 然后将path当作参数传给basename()和dirname()
这样就可以得到当前工作文件为:dela_c, 当前工作文件的目录名:/home/dela
真是两个好用到哭的系统调用~