Linux C语言遍历目录结构

时间:2021-07-08 04:20:45

遍历目录结构查找文件是很常用的功能,今天介绍一下使用Linux C 遍历Linux目录结构的方法:

  linux提供几个系统调用,以便于直接目录的读取和操作:

  DIR * opendir(const char * pathname);

  struct dirent * readdir(DIR * dir_handle);

  int closedir(DIR * dir);

  int stat(const char *file_name, struct stat *buf);

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <dirent.h>          //包含目录操作的相关函数

/**
* @Param pathname 要遍历的目录全路径名称
* @Param depth 当前的遍历等级,初始为0
*/
void printdir(const char * pathname, const int depth)
{
DIR * dir;
struct dirent * de;
struct stat fs;
int i = 0; if((dir = opendir(pathname)) == NULL)
{
printf("open dir %s error \r\n", pathname);
return;
} chdir(pathname);
while((de = readdir(dir)) != NULL)
{
if(strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0){continue;} if(stat(de->d_name, &fs) == -1){perror("fstat error");continue;} if(S_ISDIR(fs.st_mode))
{
              /**
               * 如果当前路径是目录,就递归调用printdir函数
              */
for(i=0;i<depth;++i){printf(" ");}
printf("%s\r\n", de->d_name);
printdir(de->d_name, depth + 4);
}
else
{
for(i=0;i<depth;++i)
{
printf(" ");
} printf("%s\r\n", de->d_name);
}
}
chdir("..");
closedir(dir); return;
} int main(int argc, char ** argv)
{
printdir("/root/projects", 0); return 0;
}

Linux 自带的目录遍历函数

int scandir(const char *dir,struct dirent **namelist,int (*filter)(const void *b),

int ( * compare )( const struct dirent **, const struct dirent ** ) );
int alphasort(const void *a, const void *b);
int versionsort(const void *a, const void *b);

具体函数使用方法见man

Linux C语言遍历目录结构的更多相关文章

  1. 比起Windows,怎样解读Linux的文件系统与目录结构?

    比起Windows,怎样解读Linux的文件系统与目录结构? Linux 和Windows的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习. 本文先对Window ...

  2. Linux文件系统的主要目录结构说明及分区方案

    Linux操作系统有一些固定的目录.各种Linux发行版的目录结构虽然不会一模一样,但是不会有很大差异.知道了这些目录的作用,不仅对你进行磁盘分区规划很有帮助,而且会让你以后的日常维护工作变得轻松.只 ...

  3. Linux基础系列—Linux内核源码目录结构

    /** ****************************************************************************** * @author    暴走的小 ...

  4. 【转】完美解读Linux中文件系统的目录结构

    一.前 言 接触Linux也有一段时间了,不过这几天在编译开源程序时,才发现自己对linux文件系统的目录结构了解的不够透彻,很多重要目录都说不清楚是用来干嘛的,于是在网上百度了一下这方面的介绍,根据 ...

  5. 比起 Windows,怎样解读 Linux 的文件系统与目录结构?

    Linux 和 Windows 的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习. 本文先对 Windows 和 Linux 上面文件系统原理.组织概念进行区分, ...

  6. linux目录结构 主流Linux发行版的目录结构

    目录 目录结构 一般教学的目录 CentOS7 openSUSE15.1 Ubuntu18.04 详细说明: /dev目录 /etc目录 /proc目录 /usr目录 /var目录 比较重要的目录 文 ...

  7. Linux系列&colon;快捷键、目录结构、用户目录

    一.快捷键 1.历史命令 查看历史命令:history [root@centos-master ~]# history 1 2020-10-25 21:03:39 2 2020-09-17 20:43 ...

  8. Linux 文档与目录结构

    Linux之文档与目录结构   Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到 ...

  9. Linux编程 2 &lpar;遍历目录cd与查看文件和目录ls&rpar;

    一.   遍历目录 在 linux系统上,可以使用cd切换目录命令. 分二种路径,一是绝对文件路径,另一种是相对文件路径. 1.  绝对文件路径 在虚拟目录中采用文件路径,以虚拟目录根目录开始,相当于 ...

随机推荐

  1. jQuery对象和DOM对象的区别

    jQuery对象和DOM对象使用说明,需要的朋友可以参考下.1.jQuery对象和DOM对象第一次学习jQuery,经常分辨不清哪些是jQuery对象,哪些是 DOM对象,因此需要重点了解jQuery ...

  2. Python&lowbar;Day&lowbar;04 set方法总结

    set(集合) 直接创建一个空集合 set_empty = set() print(set_empty) # set() 根据参数创建 # 根据参数 set_argument = set(42,',' ...

  3. 与Java互操作

    课程内容涵盖了Java互操作性. Javap 类 异常 特质 单例对象 闭包和函数 变化性 Javap javap的是JDK附带的一个工具.不是JRE,这里是有区别的. javap反编译类定义,给你展 ...

  4. loadrunner (一)如何查看分析、报告结果

  5. 使用UEditor无法SetContent的问题

    无法SetContent是因为 <script id="txtContent" name="txtContent" type="text/pla ...

  6. cocos2d-x之物理按键初试

    bool HelloWorld::init() { if ( !Layer::init() ) { return false; } auto listener=EventListenerKeyboar ...

  7. C&num; winform 登录 单例模式&lpar;转&rpar;

    主界面配置代码: frmLogin Codz program.cs 代码 static class Program { public static EventWaitHandle ProgramSta ...

  8. django 时间计数

    value必须replace(tzinfo=None)变成datetime格式,否则格式不对不能相减.

  9. Oracle基本流程语句

    ====1.IF语句==========

  10. &period;NET Core项目从xproj&plus;project&period;json向csproj迁移简介

    3月7日,微软发布了Visual Studio 2017 RTM,与之一起发布的还有.NET Core Runtime 1.1.0以及.NET Core SDK 1.0.0,尽管这些并不是最新版,但也 ...