linux c获取文件路径和文件名

linux c获取文件路径和文件名

linux提供了两个函数分别用来获取文件所在的目录和文件名:

char *dirname(char *path);
char *basename(char *path);

它们被包含在头文件libgen.h中,dirname取得的路径名不包含最后的/basename取自于最后一个下划线后的内容。

以下是几个示例:

|路径|dirname|basename|
|:-:|:-:|:-:|
|/usr/lib| /usr|lib|
|/usr/|/|usr|
|usr|.|usr|
|.|.|.|
|..|.|..|

通过这两个函数我们就可以写出属于我们自己的dirname和basename命令了:

#include <libgen.h>
#include <stdio.h>

int main(int argc, char **argv) {
    if (argc < 2) {
        printf("Usage: %s path ...\n", argv[0]);
        return 0;
    }

    for (int i = 1; i < argc; i++) {
        printf("%s\n", dirname(argv[i])); // basename直接替换这里的函数即可
    }

    return 0;
}

编译运行:

> gcc dirname.c -o dirname
> ./dirname /usr/local /data/
/usr
/data

实际上linux也内置了dirnamebasename两个命令:

> basename /usr/lib/libDeployPkg.so.0 
libDeployPkg.so.0
> dirname /usr/local/ /data
/usr
/
最后修改:2018 年 12 月 16 日 08 : 39 PM

发表评论