使用opendir closedir readdir stat实现一个递归遍历目录的程序
输入一个指定目录,默认为当前目录。递归列出目录中的文件,同时显示文件大小。
思路分析
递归遍历目录:ls-R.c
1. 判断命令行参数,获取用户要查询的目录名。 int argc, char *argv[1]
argc == 1 --> ./
2. 判断用户指定的是否是目录。 stat S_ISDIR(); --> 封装函数 isFile() { }
3. 读目录: read_dir() {
opendir(dir)
while (readdir()){
普通文件,直接打印
目录:
拼接目录访问绝对路径。sprintf(path, "%s/%s", dir, d_name)
递归调用自己。--》 opendir(path) readdir closedir
}
closedir()
}
read_dir() --> isFile() ---> read_dir()
递归遍历目录代码预览
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <string.h>
4. #include <unistd.h>
5. #include <sys/stat.h>
6. #include <dirent.h>
7. #include <pthread.h>
8.
9. void isFile(char *name);
10.
11. // 打开目录读取,处理目录
12. void read_dir(char *dir, void (*func)(char *))
13. {
14. char path[256];
15. DIR *dp;
16. struct dirent *sdp;
17.
18. dp = opendir(dir);
19. if (dp == NULL) {
20. perror("opendir error");
21. return;
22. }
23. // 读取目录项
24. while((sdp = readdir(dp)) != NULL) {
25. if (strcmp(sdp->d_name, ".") == 0 || strcmp(sdp->d_name, "..") == 0) {
26. continue;
27. }
28.