[代码实例][Linux系统编程]遍历目录

关于linux系统遍历一个目录下所有文件的代码原理以及代码 11.23 这段时间一直在写linux系统内核的代码,刚开始就在linux文件系统这儿纠了好久,直到现在,说不会写吧!写了好几版了,也生成exe了,说会写吧,代码一跑,哦豁,没达到自已想要的效果,就是文件目录没遍历成功。 最关键的点还是,符号链接以及目录遍历的事情,不出现segmentation fault就很不错了。跟我们平常的循环不大一样,这个是目录遍历,i-node文件表多多少少还是得懂点的。 书上有两个代码,一个是只遍历一个目录下的一层级目录,不是我想要的效果,一个是遍历了一个目录下所有的层级 阅读详情
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <errno.h>

#include <limits.h>
#include <dirent.h>


#define MIN(x,y)    (((x) < (y)) ? (x) : (y))

#define IS_APATH(p)  (*(p) == '/')
#define IS_RPATH(p)  (!(IS_APATH(p)))

void list_files(const char * dir_path);

int main(int argc, char * argv[])
{
    char path[PATH_MAX] = {0};

    if((argc == 2 && strcmp(argv[1], "--help") == 0)
        || argc != 2)
    {
        printf("Usage: %s <path>\n", argv[0]);
        return EXIT_SUCCESS;
    }

    if(strlen(argv[1]) >= PATH_MAX)
    {
        fprintf(stderr, "Path length is too long!\n");
        return EXIT_FAILURE;
    }

    if(IS_RPATH(argv[1]))
        realpath(argv[1], path);
    else
        strncpy(path, argv[1], PATH_MAX);

    list_files(path);

    return EXIT_SUCCESS;
}

void list_files(const char * dir_path)
{
    DIR * dirp;
    struct dirent * dp;
    bool is_root;
    char path[PATH_MAX] = {0};

    is_root = strcmp(dir_path, "/") == 0;

    if((dirp = opendir(dir_path)) == NULL)
    {
        perror("opendir");
        exit(EXIT_FAILURE);
    }

    while(true)
    {
        errno = 0;
        if((dp = readdir(dirp)) == NULL)
            break;

        if(strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0)
            continue;


        snprintf(path, PATH_MAX, "%s/%s", (is_root ? "" : dir_path), dp->d_name);
        if(dp->d_type == DT_DIR)
            list_files(path);
        else
            printf("%s\n", path);          
    }

    if(closedir(dirp) != 0)
    {
        perror("closedir");
        exit(EXIT_FAILURE);
    }
}
Linux c 目录管理—目录简单遍历 opendir、readdir、scandir Linux c 目录管理:    目录的简单遍历:   opendir函数:        函数原型: DIR * opendir(const char* path); 打开一个目录,在失败的时候返回NULL(如果path对应的是文件,则返回NULL)   readdir函数:       函数原型: struct dirent * readdir(DIR * dir_hand 阅读详情

相关推荐

linux c 实现遍历指定路径下的文件夹及文件

linux c 实现遍历指定路径下的文件夹及文件 ,修改了一下程序,使其可以在当前路径下以文件名“遍历结果.txt”输出运行结果; 运行结果改为树形输出方式。

linux系统编程(全)

给定一个文件的路径名,open()返回一个文件描述符,一个小的非负整数,用于后续的系统调用(read(2), write(2), Iseek(2), fcntl(2),等等)。成功调用返回的文件描述符将是进程当前未打开的编号最低的文件描述符。失败:返回 -1程序是静态的概念,gcc xxx.c -o pro磁盘中生成的文件,叫做程序。进程是程序的一次运行活动,通俗点的意思就是程序跑起来了,系统中就多了一个进程。每一个进程都有一个非负整数表示的唯一ID,叫做pid,类似身份证pid = 0;

qq_47944751的博客 1万+

Python学习(一)

快速入门 1.Linux系统中是可以直接使用Python进行编程,具体如下: 进入Python:在linux的Terminal中输入 Python ,进入Python的命令行; 退出Python:在linux的Terminal中输入quit() 或 exit() 或 ctrl +d ,再回车,退出Python的命令行。 2.python的源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发。 3.Python程序的文件扩展名通常都是 .py。 4.执行Python程序的方式:在

SummerXRT的博客 1280

Linux系统编程

目录第一章Linux简介Linux版本Linux体系结构第二章操做系统简介2.1操作系统的概念2.2Linux接口2.3Linux操作系统重要概念呢2.3.1并发2.3.2进程的基本概念2.3.3PCB进程控制块和文件描述符表2.3.4虚拟地址空间2.3.5CPU的两种运行状态2.3.6什么是库函数2.3.7什么是系统调用第三章文件IO3.1c库io函数的工作流程3.1.1文件读写的基本流程3.2c库函数与系统函数的关系3.3文件描述符3.4文件IO函数3.4.1open/close3.4.2read/wr

qq_60495456的博客 1万+

一文吃透 BMS:动力电池与储能共用的电池管控全架构详解

BMS作为电池系统的核心控制器,其技术深度和系统复杂性不容小觑。动力电池与储能系统虽然应用场景不同,但在核心架构上共享大量基础技术。成功的BMS设计需要在精度、可靠性、成本、功耗之间找到最佳平衡点。未来,随着电池技术的进步和智能化需求的提升,BMS将向着更高集成度、更强智能化、更优经济性的方向发展。无论是汽车工程师还是储能系统设计师,深入理解BMS的全栈架构,掌握其核心技术原理,都将是应对未来能源存储挑战的关键能力。核心要点回顾BMS采用分层分布式架构,硬件是基础,算法是灵魂。

小帽子的博客 339

手把手带你搭建一个语音对话机器人:5分钟定制个人AI小助手

通过本文的简单步骤,你已经掌握了如何用 Python 搭建一个语音对话机器人。我们使用了实现语音识别,利用 OpenAI API 生成对话内容,并通过gTTS将文本转换为语音。整个流程非常简洁,你可以根据自己的需求进一步扩展机器人功能,甚至将其集成到实际的应用场景中。

小蜗牛的珍贵百宝箱 4805

linux系统编程

linux应用开发的的预备知识,对linux的理解

嵌入式分享 4813

SPH vs Lagrange网格混合建模实战:用LS-DYNA模拟弹丸穿孔效应

本文深入探讨了在LS-DYNA中运用SPH与Lagrange网格混合建模技术,高效模拟超高速碰撞下弹丸穿孔效应的实战方法。通过分析模型分区策略、耦合界面处理及关键参数设置,解决了传统方法在模拟大变形、材料断裂时的网格畸变或计算成本高昂问题,为相关工程仿真提供了兼顾精度与效率的解决方案。

weixin_29211309的博客 108

Linux 系统编程:从零基础到精通,收藏这篇就够了!

系统调用是一个程序向操作系统发出的请求。当应用程序需要访问某些资源(如磁盘、网络或其他硬件设备)或执行某些特定的操作(如创建进程或线程)时,它通常会通过系统调用来完成。工作原理模式切换:应用程序在用户空间运行,而操作系统内核在内核空间运行。系统调用涉及从用户空间切换到内核空间。参数传递:程序将参数传递给系统调用,通常通过特定的寄存器。执行:内核根据传递的参数执行相应的操作。返回结果:操作完成后,内核将结果返回给应用程序,并将控制权返回给应用程序。read() 和 write():分别用于读取和写入文件。

leah126的博客 5108

光谱特征选择之模拟退火算法SA

光谱特征选择之模拟退火算法SA。

weixin_42621095的博客 901

机器学习之多种算法优缺点总结及优化方法

一、无监督算法: 1、聚类算法:Kmeans 2、关联规则算法:Apriori 二、有监督算法 1、分类算法 决策树(Decision Tree) 支持向量机(SVM) K近邻(kNN,k-NearestNeighbor) 朴素贝叶斯 逻辑回归 2、回归算法 线性回归 多项式回归 3、集成算法 a、bagging(Bootstrapped Aggregation) 随机森林 ...

平原的博客 7081

[代码实例][Linux系统编程]遍历目录并且输出目录下文件MD5值

main.c:#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <errno.h>#include <limits.h> #include <dirent.h> #define MIN(x,y) (((x) < (y)) ? (x) : (y))#define IS_

火云的专栏 1280

【2025软考高级架构师】论文篇——4、论可靠性系统中软件容错技术的应用

软件容错技术对软件的稳定性起着至关重要的作用,尤其是针对互联网性质的软件并发高存在流量峰值等问题,软件容错技术的应用的重要性就不言而喻了。经过这次我所采用的软件容错技术的方法和措施的实施效果后,使我也看到了自己身上的不足之处,我会在今后的架构设计过程中,不断更新自己的知识,不断完善自己的架构设计领域,设计出更好的软件架构,更好的支撑业务平台的运行,提高公司的竞争力,为公司为社会尽一份绵薄之力。

qq837993702的博客 618

Linux下遍历文件夹的实现

转自:http://blog.youkuaiyun.com/wallwind/article/details/7528474 linux C 遍历目录及其子目录#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; #include &lt;dirent.h&gt; #include &lt...

架构设计 324

从 OA 门户到 SAP 的单点登录全景解析

OA(Office Automation)门户往往已与企业身份证明源(Microsoft Entra ID、LDAP 等)集成。管理员希望:员工在 OA 登陆后访问 SAP Fiori Launchpad、OData API 或 RFC 接口时无需再次输入账号密码,而 SAP 仍能识别用户身份并执行基于角色的授权。此时 OA 可以直接充当 IdP,也可以把企业 IdP 发放的令牌转发给 SAP 充当 SP(service provider)。SAP Help Portal 将这类跨系统认证称为 single

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 997

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java用尾递归遍历目录

public class TraverseFileDirectoryActivity extends Activity { private static final String TRAVERSE_DIRECTORY = "/sdcard/"; private List mFileList = new ArrayList(); /** Called when the acti

cs_lht的专栏 1658

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LINUX下用C语言历遍目录 C语言列出目录 dirent.h在C/C++中的使用

LINUX下历遍目录的方法一般是这样的打开目录-》读取-》关闭目录相关函数是opendir -> readdir -> closedir#include <dirent.h>DIR *opendir(const char *dirname);#include <dirent.h>struct dirent *readdir(DIR *dirp);#include...

weixin_30824479的博客 184

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux系统编程之目录遍历

目录遍历是指以递归或循环方式,逐个访问文件系统中的文件和子目录,这通常用于实现文件搜索、备份工具、同步服务等功能。为了有效地遍历目录,Linux提供了多种方法,最常见的是:readdir和scandir。下面,我们将分别进行介绍。可以看到,readdir和scandir都可以用于读取目录内容。但它们的工作方式和使用场景有所不同,主要可以归纳为以下几点。1、使用场景。readdir:逐个读取目录条目,适用于简单的遍历操作。

hope_wisdom的技术博客 1510

linux opendir readdir closedir 的使用

2012-06-04 10:27 linux opendir readdir closedir 的使用 在Linux下opendir()、readdir()和closedir()这三个函数主要用来遍历目录。在使用这三个函数前必须先包括以下两个头文件:#include #include opendir函数的原型为: DIR *opendir(const char *name);它返回

joben的专栏 911

【Linux操作系统】Linux系统编程实现递归遍历目录,详细讲解opendir、readdir、closedir、snprintf、strcmp等函数的使用

opendir函数用于打开一个目录,并返回一个指向DIR类型的指针,该指针用于后续的目录操作。path:要打开的目录的路径。返回值:如果成功打开目录,则返回一个指向DIR类型的指针;如果失败,则返回NULL。readdir函数用于读取目录中的文件,并返回一个指向dirent结构体的指针。dir:一个指向已打开目录的指针。返回值:如果成功读取到下一个文件,则返回指向dirent结构体的指针;如果到达目录末尾或发生错误,则返回NULL。dirent// 文件的inode号。

Goforyouqp的博客 8682

Linux c 遍历目录及目录下文件

背景 某项目中需要对指定目录下的所有文本文件加密,于是需要搜索指定目录下所有的文本文件。 要想搜索,先要能够遍历指定目录下所有文件,并且支持对递归子目录的遍历。 分析 我们知道,许多操作系统中的目录结构都是使用树结构。 使用递归的方法定义树是比较容易的。一棵树地一些节点的集合。 这个集合可以为空,若非空,则树由树根和0个或者多个非空的子树组成。 子树中的根都被来自树根的一条有向的边所连接。 ...

guotianqing的博客 1万+

八、Linux编程之递归遍历目录

八、递归遍历目录、dup和dup2 目录:八、递归遍历目录、dup和dup2一、递归遍历目录1.步骤分析 一、递归遍历目录 实现终端指令 ls -R,即将所有内部的目录展开成文件 1.步骤分析 步骤: 1. 判断命令行参数,获取用户要查询的目录名,通过 int argc, char *argv[] 获取,若 argc == 1,那么用户想要查询的是当前目录 ./ 2. 判断用户指定的路径是否为一个目录,通过 stat() 和宏函数 S_ISDIR() 判断 3. 打开、读取、关闭:opendir()、re

~宪宪的博客 1432

linux 目录遍历

在linux 中,如何遍历指定目录下的所有文件夹呢? 要求能搜索结果中包含隐藏文件夹 脚本名:ergodic_folder.sh 脚本内容: Shell代码   #!/bin/sh   list_alldir(){       for file2 in `ls -a $1`       do           if [ x"$file2"

stonesharp的专栏 4502

Linux 实验 目录遍历

在Linux操作系统中使用vim编辑器,自行编译C代码,实现目录的list,目录遍历 1、准备工作(熟悉Linux下的函数调用) int stat(const char* file_name, struct stat* buf) 结构体 struct stat{} struct stat{ mode_t st_mode; //文件访问权限 ino_t st_ino; //索引节点号 dev...

冰冻三尺非一日之寒 1574
上一篇: [代码实例][Linux系统编程]判断相对路径或绝对路径
下一篇: [代码实例][C语言]计算文件的MD5值
cloudblaze
博客等级 码龄17年 81粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值