基于linux下的高并发服务器开发(第一章)- 目录遍历函数

news2024/10/5 16:30:31

10 / 目录遍历函数 

// 打开一个目录
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
    参数:
        - name: 需要打开的目录的名称
    返回值:
        DIR * 类型,理解为目录流
        错误返回NULL


// 读取目录中的数据
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
    - 参数:dirp是opendir返回的结果
    - 返回值:
        struct dirent,代表读取到的文件的信息
        读取到了末尾或者失败了,返回NULL

// 关闭目录
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);

任务:读取某个目录下所有的普通文件的个数

readFileNum.c

/*
    // 打开一个目录
    #include <sys/types.h>
    #include <dirent.h>
    DIR *opendir(const char *name);
        参数:
            - name: 需要打开的目录的名称
        返回值:
            DIR * 类型,理解为目录流
            错误返回NULL


    // 读取目录中的数据
    #include <dirent.h>
    struct dirent *readdir(DIR *dirp);
        - 参数:dirp是opendir返回的结果
        - 返回值:
            struct dirent,代表读取到的文件的信息
            读取到了末尾或者失败了,返回NULL

    // 关闭目录
    #include <sys/types.h>
    #include <dirent.h>
    int closedir(DIR *dirp);

*/
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int getFileNum(const char * path);

// 读取某个目录下所有的普通文件的个数
int main(int argc, char * argv[]) {

    if(argc < 2) {
        printf("%s path\n", argv[0]);
        return -1;
    }

    int num = getFileNum(argv[1]);

    printf("普通文件的个数为:%d\n", num);

    return 0;
}

// 用于获取目录下所有普通文件的个数
int getFileNum(const char * path) {

    // 1.打开目录
    DIR * dir = opendir(path);

    if(dir == NULL) {
        perror("opendir");
        exit(0);
    }

    struct dirent *ptr;

    // 记录普通文件的个数
    int total = 0;

    while((ptr = readdir(dir)) != NULL) {

        // 获取名称
        char * dname = ptr->d_name;

        // 忽略掉. 和..
        if(strcmp(dname, ".") == 0 || strcmp(dname, "..") == 0) {
            continue;
        }

        // 判断是否是普通文件还是目录
        if(ptr->d_type == DT_DIR) {
            // 目录,需要继续读取这个目录
            char newpath[256];
            sprintf(newpath, "%s/%s", path, dname);
            total += getFileNum(newpath);
        }

        if(ptr->d_type == DT_REG) {
            // 普通文件
            total++;
        }


    }

    // 关闭目录
    closedir(dir);

    return total;
}

(1)gcc readFileNum.c -o app 

(2)./app /home/nowcoder/Linux/ 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/757701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hcip第五次作业----BGP联邦综合实验

配置IP地址 r1 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.0.0.1 24 [r1-GigabitEthernet0/0/0]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int lo1 [r1-LoopBack1]ip add 10.0.0.1 24 r2 [r2]int g0/0/0 [r2-GigabitEthernet0/0/0]ip add 12.0.0.2…

Orangepi Zero2 基于官方外设开发(二)

一、OLED屏显示-IIC协议 1、相关介绍 IIC及OLED相关内容请参考以下文章&#xff1a; IIC协议_单行梦想家的博客-CSDN博客 OLED显示屏_单行梦想家的博客-CSDN博客 2、OrangePi的IIC接口 由原理图可知&#xff0c;Orange Pi Zero 2 可用的 i2c 为 i2c3 Linux系统启动后&…

针对我国水资源量设计的农田灌溉收费管理平台

安科瑞虞佳豪 降水量 2013年&#xff0c;全国平均降水量661.9mm&#xff0c;折合降水总量62674.4亿立方米&#xff0c;比常年值偏多3.0%。从水资源分区看&#xff0c;松花江、辽河、海河、黄河、淮河、西北诸河6个水资源一级区&#xff08;以下简称北方6区&#xff09;平均降水…

Ubuntu22.04密码忘记怎么办 Ubuntu重置root密码方法

在Ubuntu 22.04 或其他更高版本上不小心忘记root或其他账户的密码怎么办&#xff1f; 首先uname -r查看当前系统正在使用的内核版本&#xff0c;记下来 前提&#xff1a;是你的本地电脑&#xff0c;有物理访问权限。其他如远程登录的不适用这套改密方法。 通过以下步骤&#…

基于GIS的生态敏感性评价与产业路径选择研究:以江西省吉安市为例

导读: 确立绿水青山就是金山银山的理念,建立生态经济体系,是新时代生态环境保护与经济发展的协调之道。对产业规划而言,与生态同行,构建绿色产业体系,是推动地区高质量发展的根本要求。鉴于此,文章从实证角度出发,以江西省吉安市为研究对象,采用生态敏感性评价方法,选…

rv1126板子挂载nfs、拉流测试、固件烧写

目录 一、Ubuntu NFS服务器设置设置有线网卡桥接模式安装NFS并启动NFS二、烧录固件三、配置ipwindow上安装adb修改板子的ip,与ubuntu的桥接网卡同网段四、通过ssh登录开发板五、板子上挂载nfs六、测试拉流七、遇见的问题问题一问题二一、Ubuntu NFS服务器设置 设置有线网卡桥…

openwrt上ipv6 ddns 解析

之前写过一个教程如何在openwrt上使用docker版本的ddns解析工具&#xff0c;使用docker的好处是部署简单&#xff0c;支持的域名种类多&#xff1b;openwrt的docker环境安装起来也很方便&#xff0c;尤其有不少编译好的&#xff0c;带docker环境的镜像可以用&#xff0c;例如笔…

什么是向量数据库?

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

via24种人格力量之学习的力量,爱学习的特征和益处

人格力量是一种可支配的价值观&#xff0c;通常是正向的&#xff0c;有益于学习工作和日常生活的&#xff0c;在via 24种人格力量测试中&#xff0c;爱学习是其中的维度之一&#xff0c;爱学习的人格特征会让人终生受益&#xff0c;但是凡事都适度&#xff0c;如果过度的痴迷于…

检测到会话cookie中缺少HttpOnly属性

绿盟科技"远程安全评估系统"安全评估报告,这里记录一下处理过程。 检测到会话cookie中缺少HttpOnly属性 详细描述 会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的cookie信息&#xff0c;造成用户cookie信息泄露&#xff0c…

Java 中 注解是什么?如何使用

当谈到 Java 中的注解时&#xff0c;我们指的是 Java 5 中引入的一种元数据机制&#xff0c;它允许我们在代码中添加元数据信息并在运行时读取它们。在本文中&#xff0c;我们将深入探讨 Java 中的注解&#xff0c;包括它们是什么、如何使用它们以及一些示例代码。 注解是什么&…

浅读《商用密码应用性评估白皮书》

浅读《商用密码应用性评估白皮书》 密码的重要性商用密码概念商用密码典型应用场景&#xff08;一&#xff09;电信和互联网领域&#xff08;二&#xff09;工业互联网领域&#xff08;三&#xff09;车联网领域&#xff08;四&#xff09;物联网领域&#xff08;五&#xff09…

路径规划算法:基于驾驶训练优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于驾驶训练优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于驾驶训练优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

Redis实战篇(五)

8、达人探店 8.1 达人探店-发布探店笔记 探店笔记类似点评网站的评价&#xff0c;往往是图文结合。对应的表有两个&#xff1a; tb_blog&#xff1a;探店笔记表&#xff0c;包含笔记中的标题、文字、图片等tb_blog_comments&#xff1a;其他用户对探店笔记的评价 具体发布流…

使用SiO2和高介电常数介质的SiC功率MOSFET的栅极阻抗分析

Impedance n.阻抗 dielectric n.电解质 propagation n.传播 标题&#xff1a;Gate Impedance Analysis of SiC power MOSFETs with SiO2 and High-κ Dielectric 阅读日期&#xff1a;2023.7.13 研究了什么 这篇论文研究了SiC功率MOSFET的门电阻Zgg特性&#xff0c;包括SiO2…

大语言模型举例和相关论文推荐

大语言模型如火如荼。甚至已经爆发了“百模大战” 2023年&#xff0c;“百模大战”&#xff0c;一触即发。 因为工作需要&#xff0c;我除了参加行业、企业、研究机构的发布会和闭门会&#xff0c;还需要基于自身的业务&#xff0c;不断了解最新的AI大模型和AIGC应用。 2024…

Java线程状态

Java线程状态 有哪几种 在Java中&#xff0c;线程可以存在多种状态。以下是常见的几种线程状态&#xff1a; 新建状态&#xff08;New&#xff09;&#xff1a;当创建一个线程对象时&#xff0c;线程即处于新建状态。此时尚未调用线程的start()方法。 可运行状态&#xff08;…

26-分布式锁

1、JMeter下载安装 Index of /dist/jmeter/binaries 1.1、JMeter配置 1.1.1、JMeter页面显示中文 将jmeter.properties文件中的language=zh_CN。 1.1.2、JMeter发送请求返回的Response显示中文 将jmeter.properties文件中的sampleresult.default.encoding=UTF-8 1.2、启…

Vue绑定class样式

效果&#xff1a;指定变换成某种颜色 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.basic{width: 400px;height: 100px;border: 1px solid black;}.happy{backg…

Redis数据类型和使用场景

Redis五大基本数据结构 String,Hash,List,Set,ZSet String String是Redis最基本的数据结构&#xff0c;用来设置KV键值对&#xff0c;redis有16个数据库&#xff0c;可直接在当前数据库中set添加String的KV对。 使用场景 KV对&#xff0c;记录学生ID和姓名。<ID, NAME&g…