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

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

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

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

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

代码运行截图



更多相关:

  • 这里用散装版本的AutoScssStruct4Vue为例 先去https://github.com/accforgit/AutoScssStruct4Vue下载 然后把解压后的包放入C:UsersAdministrator.vscodeextensions(地址根据你自己的安装目录而定)    点开目录在资源管理器...

  • 文章目录git 最小配置作用域git 创建本地仓库git log 查看版本演进.git 目录refs目录objectsgit 三种对象类型详解 (commit ,tree,blob)...

  • 一 . 进入目录权限 如果我在普通用户下创建了一个目录f1,然后使用chomd u-rwx,g-rwx,o-rwx之后,我在普通用户下想进入f1目录,权限不允许。 然后我切换到超级用户下,再次尝试进入到f1目录,这个时候允许进入。 然后回到普通用户下,只给f1的所有者读的权限,然后在普通用户下尝试进入,此时权限还是...

  • windows下rpc框架thrift的环境配置 引用链接: https://www.cnblogs.com/49er/p/7193829.html 最近在弄windows下 的Facebook的rpc 框架 thrift , 网上东西看了很多, 但是大都不能一篇到位, 这里总结了一下, 也记一下自己遇到的问题和解决的方法 这里...

  • Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。本系列学习计划有Blue同学作为发起人,主要以Open3D官方网站的教程为主进行翻译与实践的学习计划。点云PCL公众号作为免费的3D视觉,点云交流社区,期待有使用Op...

  • 业务场景: 我在一个bash脚本中修改了PATH变量的内容,并将其保存到/etc/profile文件中,同时执行了 source /etc/profile 但是当脚本退出时,我发现PATH变量还是没有修改生效,但是,如果我在命令行再直接执行 source /etc/profile 才发现PATH生效了。 请问,这是什么原因呢?...

  • 给定一个二叉树与整数sum,找出所有从根节点到叶结点的路径,这些路 径上的节点值累加和为sum 即创建一个二叉树,要求二叉树中有一个路径从根节点到叶节点到路径加起来代表到和为 给定的sum 如下二叉树 给定路径之和为18,则需要输出两条路径: [1,4,5,8] [1,4,6,7] 同样,这个过程我们可以使用先序深度优先搜索,同...

  • export PATH=$PATH:/usr/local/php/bin 转载于:https://www.cnblogs.com/ttiandeng/p/6554902.html...

  • 2019独角兽企业重金招聘Python工程师标准>>> 每台计算机安装程序不同,环境变量path会有不同,若误删了环境变量path,可以如下完美解决.   Win+R 输入regedit打开注册表(开始-运行里输入regedit)  找到  HKEY_LOCAL_MACHINESYSTEMControlSet002...