[代码实例][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万+

从零搭建:基于Matlab/Simulink与FlightGear的飞行器实时可视化仿真平台

本文详细介绍了如何从零搭建基于Matlab/Simulink与FlightGear的飞行器实时可视化仿真平台。通过环境准备、模型部署、接口配置及联合仿真等步骤,帮助用户快速掌握飞行器仿真的核心技术,实现高效的三维可视化与实时数据交互。

weixin_29100399的博客 517

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万+

SystemVue 链路预算、仿真分析步骤

使用SystemVue进行链路预算、频谱分析等,相对ADS更全面。

BeCourageable的博客 3833

基于Gardner环的QPSK定时同步MATLAB仿真:四倍采样与多场景性能分析

本文详细介绍了基于Gardner环的QPSK定时同步MATLAB仿真方法,重点分析了四倍采样技术在定时同步中的应用与性能优化。通过MATLAB代码实例展示了Gardner环的实现原理、多场景性能分析及常见问题解决方案,为数字通信系统的定时同步设计提供实用参考。

weixin_29083475的博客 373

linux系统编程

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

嵌入式分享 4813

欧姆龙NX控制器与Sysmac studio的电机配置方法

使用歐姆龍NX控制器與Sysmac studio控制電機簡單運動 <上> — 環境配置0. 前言1. 實際硬件連接2. Sysmac studio 配置2.1 新建工程2.2 通信設置2.2.1 軟件內通信設置2.2.2 上位機本地通信設置 0. 前言 筆者最近需要使用到歐姆龍的多軸運動控制器來控制電機運動,但網路上關於Sysmac studio的教程或文章較為零散,作為初學者的筆者難以消化,故在稍微會用軟件後撰寫本文,為自己留個筆記,同時希望能夠幫助到需要的人。 1.本文面向買了歐姆龍控制器

weixin_46005653的博客 1万+

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

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

leah126的博客 5108

wpa_supplicant EAPOL状态机分析

wpa_supplicant EAPOL状态机分析

加油鸭 1476

Ubuntu运行vmware时报错Vmware Unable to install all modules!Use shipped Linux kernel AIO access library解决。

Ubuntu运行vmware时报错Vmware Unable to install all modules! vmware --version 提示下面内容: [AppLoader] Use shipped Linux kernel AIO access library. An up-to-date "libaio" or "libaio1" package from your system is preferred. VMware Workstation 16.1.2 build-17966106

wto882dim的博客 2848

[代码实例][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

XS5018A TX ISP芯片同轴高清模拟输出图像处理芯片用户指南

当看门狗开启且系统异常,看门狗模块得不到喂狗信号时,自动产生看门狗复位信号,复位​​​​​​​。分量上与人眼对光谱的响应通常是有偏差的,通常通过一个色彩校正矩阵校正光谱响应的交叉效。但实际上由于电路的作用,复位模块对整个芯片及各个功能模块的复位进行统一管理,负责产生各个模块的软复位信。每个区域前景色可以在 16 个色表中查找,单个区域的前景色统一,各个区域的前。较弱的坏点被放大成刺眼的白点和明显的黑点,强烈推荐开启动态坏点校正功能。四种制式,通过寄存器配置,可以很方便的实现四种制式的切换、且可以对截止。

2403_88922712的博客 1959

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

CELF(Cost-Effective Lazy Forward selection)具有成本效益的惰性前向选择算法

CELF(Cost-Effective Lazy Forward selection)算法解析      引言:在社交网络影响力最大化问题的求解过程中,我们往往需要去选择一些目标种子结点作为信息初始传播的源头。贪婪算法在传播效果上的解决可以达到影响的最大化,但是在时间复杂度上面显得确十分糟糕。为此CELF算法应势而生,CELF算法利用了函数次模性的特点,在第一轮选择种子结点时,计算网络中所有节点的边际收益,但将在之后的过程中,不再做网络节点边际收益的重复计算,这相对于传统的贪婪算法,将在时间上得到非常明显的

hahaxq的博客 2477

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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、付费专栏及课程。

余额充值