300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 递归遍历Linux下的目录文件源码实现

递归遍历Linux下的目录文件源码实现

时间:2022-03-06 13:37:44

相关推荐

递归遍历Linux下的目录文件源码实现

网上搜到的结果大都不令人满意,这里综合了网上的结构,做了小许改动.希望对大家有帮助.

在Linux下的目录结构操作基本上使用opendir,readdir,closedir就够了.

#include <stdio.h>#include <string.h>#include <dirent.h>#include <sys/types.h>#include <sys/stat.h>int trave_dir(char* path){DIR *d;//声明一个句柄struct dirent *ent;//readdir函数的返回值就存放在这个结构体中struct stat sb;char childpath[512] = {'\0'};//拼凑下一级目录的全路径if(!(d = opendir(path))){printf("error opendir %s!!!\n",path);return -1;}while((ent = readdir(d)) != NULL){//把当前目录.,上一级目录..及隐藏文件都去掉,避免死循环遍历目录if(strncmp(ent->d_name, ".", 1) == 0)continue;//判断该文件是否是目录if(ent->d_type & DT_DIR){memset(childpath, '\0', sizeof(childpath));char* format = path[strlen(path)-1]=='/'?"%s%s":"%s/%s";snprintf(childpath, 512, format, path, ent->d_name);printf("[dir]%s\n", childpath);trave_dir(childpath);}else{printf("\t%s\n", ent->d_name);}}closedir(d);return 0;}int main(int argc, char* argv[]){if(argc != 2){printf("Usage: %s <path>\n", argv[0]);return 0;}trave_dir(argv[1]);return 0;}

主要特点:

(1)只需要一个入参,即指定要遍历目录树的顶层目录,并会自动判断末尾是否含有"/"

(2)目录树的打印只在函数内部实现,不会用到相关动态内存分配

(3)从readdir中返回的Dir结构就可以判断这层目录是目录还是真正的文件,不需要使用stat等函数来额外判断

使用方法:

gcc -g readdir_demo.c -o readdir_demo

./readdir_demo "/home/taoyx"或是

./readdir_demo "/home/taoyx/"

代码运行截图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。