Linux库函数之opendir/closedir/readdir

2023-05-16

 在Linux环境下,有时候需要编写一些实用的工具,比如检索功能,最近在做病毒查杀应用开发,涉及到批量扫描指定目录下文件,

因为要测试大量病毒文件,该部分功能又是要通过API集成到其他应用软件中,设计时采用单个文件扫描,但是自己测试文件另写工具

文件量太大不可能手动一个一个测试,还厚Linux下有现成的关于目录的库函数,于是就动手添加了关于获取目录文件的代码;

1)打开指定目录opendir得到目录句柄;

2)然后通过while循环不断readdir获取目录的内容,并存储到struct dirent 结构体变量中;

3)获取该结构体变量的成员函数d_name就得到了待扫描的文件,然后在使用sprintf函数加入文件绝对路径,就可以调用API进行扫描了;

4)最后关闭目录句柄closedir。

到此就解决问题啦,可以喝口水,继续其他工作啦...

---------------------------------------------------------

opendir原型:

DIR *opendir(const char *path);

DIR *dirp;      //接受打开目录句柄

返回值:NULL  打开目录失败

---------------------------------------------------------

readdir原型:

struct dirent *dir_entry;    //存储获取的目录内容

struct dirent *readdir(DIR *dirp);

返回值:NULL   获取目录内容失败或者目录内容已经全部读取完成 ;

---------------------------------------------------------

closedir原型:

int closedir(DIR *dirp);

返回值:0正常     -1错误

---------------------------------------------------------

关于struct dirent结构体主要注意两个成员即可,若有特殊情况特殊处理:

Struct dirent

{

        ino_t                           d_ino;                          //此目录进入点的inode

        ff_t                           d_off;                           //目录文件开头到此目录进入点的位移

        signed  short int      d_reclem;                             //_name的长度,不包含NULL字符

        unsigned  char             d_type;                        // d_name所指的文件类型

        char                           d_name[256];             //文件名

};

主要关注d_name(文件名)和d_type(文件类型),关于文件名就不在多说就是返回文件名字符串,而文件类型则分为两类

普通文件和文件夹,%d显示的值4代表目录,8代表文件,也就是通过dir_entry->d_type直接与4或者8比较作为if判断条件

从而可以实现遍历主目录下所有文件包括子目录,关于目录的操作基本这些,更深入的根据不同情况来定,下面看一下简单

的实现代码示例:

#include <stdio.h>

#include <dirent.h>

#include <sys/types.h>

int main(int argc,char **argv){

DIR *dirp = NULL;

struct dirent *dir_entry = NULL;

char namebuf[100] = {0};

        if(argc != 2){

printf("Error! Usage:%s [dirpath]\n",__func__);     //提示使用规则  可执行程序  +   目录

return -1;

}

if((dirp = opendir(argv[1])) == NULL){

printf("Opendir %s fail!\n",argv[1]);

return -1;

}

while((dir_entry = readdir(dirp)) != NULL){

sprintf(namebuf,"xxx/xxx/xx/%s",dir_entry->d_name);      //这里可以根据实际情况处理,若是需要遍历整个目录,只需要从

xxx;                                                                                            //main函数中剥离打开目录并获取和关闭的功能,通过递归实现

........

}

closedir(dirp);

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux库函数之opendir/closedir/readdir 的相关文章

随机推荐

  • vnc viewer不能复制黏贴

    如果Vnc Viewer不能复制黏贴 xff0c 输入一下命令 xff1a vncconfig nowin amp 解决 xff01 当然也有可能是你在VNC Viewer设置里没有开启允许输入
  • stm32串口的发送与中断接收

    stm32串口是实现单片机到上位机通讯的重要手段 xff0c 通常使用usb转ttl模块进行单片机与上位机的连接 xff0c 以实现串口的收发等功能 今天学习了串口的发送与中断接收 xff0c 现总结如下 xff1a 步骤总结 xff1a
  • 用Android的Activity生命周期解释HarmonyOS的Page Ability生命周期

    由华为出品 我国完全自主知识产权的HarmonyOS是一款 面向未来 面向全场景 xff08 移动办公 运动健康 社交通信 媒体娱乐等 xff09 的分布式操作系统 现已于2020年9月10日开源 xff0c 并面向应用开发者发布Beta版
  • 宗师级Linux 系统管理员的倾囊相授——《Linux命令行与shell脚本编程大全(第4版)》

    信息安全 早已上升为国家战略 xff0c 发展自主可控的国产操作系统迫在眉睫 为了满足国防 公安等涉密领域对操作系统平台的安全需求 xff0c 国防科技大学研制了以操作系统技术为核心 xff0c 安全可信为特色的中标麒麟 xff08 Ubu
  • Java语言的极限,就是面向对象的极限——《On Java中文版》

    自从1995年问世以来 xff0c Java已经发展成了全世界使用范围最广的语言之一 xff0c 每天都有30亿台运行Java的设备活跃在这个世界上的各个角落里 世界上大多数网站的后台使用Spring开发 xff0c 而Spring开发者必
  • 展望10年内VR技术的盈利模式的发展历程

    2016年被誉为中国VR元年 xff0c VR也成为了就像2012年的团购 2013年的P2P 2014年的O2O 2015年的大数据一样成为了创客们在咖啡厅里向投资人侃侃而谈的网络流行语 情 xff08 gen xff09 怀 xff08
  • 做后台开发用到的技能都在这儿——《后台开发:核心技术与应用实践》

    大多数面向对象语言没有指针的概念 xff0c C语言也没有对象的概念 xff0c 同时具有指针和对象的 C 43 43 语言在学习时有高昂的门槛 xff0c 同时在服务端后台开发 处理多并发的海量网络请求等方面有天然的优势 就像 Andro
  • Android Canvas 多张图片拼接成长图

    容我慢写
  • Android Canvas 给图片加上水印

    容我慢写
  • 我做面试官的故事

    2016年就要过完了 xff0c 我入行也快三年了 三年来被人面试过也面试过人 xff0c 我来给大家分享一下我面试别人的两个有趣经历吧 xff1a 1 有一天我穿着环信的T恤 xff0c 前胸是一个巨大的环信logo xff0c 后颈是环
  • 2016年点亮的新技能树——指导·招聘·业务

    2015年入职的公司刚倒闭 xff0c 一家公司招我进去带俩新人做项目 xff0c 我刚来了没半个月他俩都跑了 我成了2016年春夏之交的CSDN首页上 到新公司带新人 xff0c 新人跑了 的笑话 这个故事是有续集的 xff0c 他俩跑了
  • 给CheckBox加上动画

    容我慢写
  • SEC物权链奖金制度分析

    启程SEC物权链是什么 xff1f 靠谱吗 xff1f SEC公链是什么 xff1f 物权链怎么样 xff1f 分析于下 xff1a 一 定位 xff1a 依托原中小企业上市包装辅导策划以及不良资产运作等业务 xff0c 130家实体资产分
  • Linux安装pqsql

    PostgreSQL安装部署 1 解压 tar xvf postgresql 10 5 1 linux x64 binaries tar gz 将解压文件重命名 mv pgsql postgresql PostgreSQL无法在root用户
  • 高考失败的程序员的逆袭

    高考作文不得出现真实的校名和人名 xff0c 所以本文不包含任何真实的校名 人名乃至赞助学校的企业名 xff0c 小说情节纯属虚构 如果情节与现实生活的事实雷同 xff0c 请谨记 xff1a 英国有个人叫牛顿 xff0c 德国有个人叫莱布
  • Android程序员的十大转型之路

    IT行业是一个瞬息万变的行业 xff0c 程序员是一个不进则退的职业 我作为一个Android程序员 xff0c 多年来一直保持随时可以转型其他技术领域的状态 xff0c 保持对新技术敏感的嗅觉 我先说说Android程序员不可能转型的几个
  • 【玖哥乱弹】编程语言间的斗争

    在初级程序员阶段 xff0c 每个人都不可避免遇到选择编程语言和职业方向的难题 我挑选了几个常见的编程语言 xff0c 分析了优缺点和职业方向 xff0c 以供想当程序员的人参考 C C 43 43 一句话概括 xff1a 大多数中国程序员
  • 【玖哥乱弹】成功的IT人士这样转型AI

    AlphaGo在与围棋世界冠军的对弈大获全胜 xff0c 不但让我们领略到了AI的巨大潜力 xff0c 还把AI推上了新的浪潮之巅 作为一个从即将过去的移动互联网时代走来的Android工程师 xff0c 我深深感受到自己成了传统行业 xf
  • 【玖哥乱弹】程序员如何成为别人的男朋友

    这个世界上程序员数量很多 xff0c 有女朋友的程序员在其中的比例却很少 究其原因 xff0c 不外乎大多数程序员根本不知道怎么才能成为别人的男朋友 成为别人的男朋友对于富二代和拆迁户很容易 xff0c 而对于程序员却很难 xff0c 潘驴
  • Linux库函数之opendir/closedir/readdir

    在Linux环境下 xff0c 有时候需要编写一些实用的工具 xff0c 比如检索功能 xff0c 最近在做病毒查杀应用开发 xff0c 涉及到批量扫描指定目录下文件 xff0c 因为要测试大量病毒文件 xff0c 该部分功能又是要通过AP