linux提供了两个函数分别用来获取文件所在的目录和文件名:
1 2 |
char *dirname(char *path); char *basename(char *path); |
它们被包含在头文件libgen.h
中,dirname
取得的路径名不包含最后的/
,basename
取自于最后一个下划线后的内容。
以下是几个示例:
路径 | dirname | basename |
---|---|---|
/usr/lib | /usr | lib |
/usr/ | / | usr |
usr | . | usr |
. | . | . |
.. | . | .. |
通过这两个函数我们就可以写出属于我们自己的dirname
和basename
命令了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#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; } |
编译运行:
1 2 3 4 |
> gcc dirname.c -o dirname > ./dirname /usr/local /data/ /usr /data |
实际上linux也内置了dirname
和basename
两个命令:
1 2 3 4 5 |
> basename /usr/lib/libDeployPkg.so.0 libDeployPkg.so.0 > dirname /usr/local/ /data /usr / |
这两个函数的出现无非是为了让我们在代码中就能使用,不必要再调命令获取了。
评论