2021-11-19 C语言readdir()函数,读取目录下的文件和目录函数,通过d_type DT_REG可以知道是目录还是常规文件。-程序员宅基地

技术标签: java  android  android studio  Android  

一、C语言 readdir函数用来读取指定的目录流的目录项到一个dirent结构体指针中,并将读取指针设置为下一个目录项的位置。

二、结构dirent体定义如下:


struct dirent
{
    ino_t d_ino; //d_ino 此目录进入点的inode
    ff_t d_off; //d_off 目录文件开头至此目录进入点的位移
    signed short int d_reclen; //d_reclen _name 的长度, 不包含NULL 字符
    unsigned char d_type; //d_type d_name 所指的文件类型 d_name 文件名
    har d_name[256];
};

三、返回值:成功则返回下个目录进入点. 有错误发生或读取到目录文件尾则返回NULL.

四、测试程序

#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>

/************************************************
enum
{
    DT_UNKNOWN = 0,         //未知类型
# define DT_UNKNOWN DT_UNKNOWN
    DT_FIFO = 1,            //管道
# define DT_FIFO DT_FIFO
    DT_CHR = 2,             //字符设备
# define DT_CHR DT_CHR
    DT_DIR = 4,             //目录
# define DT_DIR DT_DIR
    DT_BLK = 6,             //块设备
# define DT_BLK DT_BLK
    DT_REG = 8,             //常规文件
# define DT_REG DT_REG
    DT_LNK = 10,            //符号链接
# define DT_LNK DT_LNK
    DT_SOCK = 12,           //套接字
# define DT_SOCK DT_SOCK
    DT_WHT = 14             //链接
# define DT_WHT DT_WHT
};
************************************************/

int main(int argc , char* argv[])
{
    DIR * dir;
    struct dirent * ptr;
    int i;
    dir = opendir("rk3566");
    while((ptr = readdir(dir)) != NULL)
    {
        printf("d_name : %s\n", ptr->d_name);

	    if (ptr->d_type == DT_REG) {//Ignore directories and only process regular files
	       printf("this is a regular file\n");
	    }
    }
    closedir(dir);
    return 0;
}

五、运行结果,通过d_type DT_REG可以知道是目录还是常规文件。。

xxx@ubuntu-xx:~/tmp$ ls -a rk3566/
.           bionic          .classpath     development  javaenv.sh       mkcombinedroot  platform_testing    RKDocs   system     vendor
..          bootable        compatibility  device       kernel           mkimage_ab.sh   prebuilts           rkst     test
10.txt      bootstrap.bash  cts            external     libcore          mkimage.sh      .repo               RKTools  toolchain
Android.bp  build           dalvik         frameworks   libnativehelper  packages        restore_patches.sh  rockdev  tools
art         build.sh        developers     hardware     Makefile         pdk             rkbin               sdk      u-boot
xxx@ubuntu-xx:~/tmp$ gcc  -o readdir_test readdir_test.c 
xxx@ubuntu-xx:~/tmp$ ./readdir_test
d_name : u-boot
d_name : restore_patches.sh
this is a regular file
d_name : compatibility
d_name : prebuilts
d_name : .repo
d_name : rockdev
d_name : packages
d_name : platform_testing
d_name : Android.bp
d_name : hardware
d_name : test
d_name : system
d_name : sdk
d_name : javaenv.sh
this is a regular file
d_name : development
d_name : RKDocs
d_name : Makefile
this is a regular file
d_name : bootable
d_name : mkcombinedroot
d_name : art
d_name : frameworks
d_name : cts
d_name : rkst
d_name : bionic
d_name : dalvik
d_name : .
d_name : 10.txt
this is a regular file
d_name : .classpath
this is a regular file
d_name : ..
d_name : tools
d_name : developers
d_name : rkbin
d_name : mkimage_ab.sh
this is a regular file
d_name : mkimage.sh
this is a regular file
d_name : libnativehelper
d_name : build.sh
this is a regular file
d_name : kernel
d_name : external
d_name : toolchain
d_name : device
d_name : bootstrap.bash
d_name : pdk
d_name : RKTools
d_name : build
d_name : vendor
d_name : libcore
xxx@ubuntu-xx:~/tmp$ 

六、实际使用场景,解析指定目录的下的所有rc后缀的文件。 

七、参考文章

struct dirent DT_REG - lydstory - 博客园

C语言readdir()函数:读取目录函数 - tiny~~ - 博客园

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37858386/article/details/121424783

智能推荐

npqsql or mono.security.dll 下载_npgsql.dll和mono.security.dll下载-程序员宅基地

文章浏览阅读942次。string connectionString = “Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword;”;NpgsqlConnection conn = new NpgsqlConnection(connectionString);conn.Open();C#连接Po..._npgsql.dll和mono.security.dll下载

cacti安装配置-程序员宅基地

文章浏览阅读49次。(安装前提:httpmysqlphp已安装,如果没有安装,使用yuminstallhttp*mysql*php*)1、下载所需的安装包安装cacti需要以下几个软件的支持Cacti、rrdtool、net-snmpCacti下载地址:http://www.cacti.net/我下载的是cacti-0.8.8a.tar.gzrrdtool和net-snmp直接使用..._下载cacti-0.8.8a.tar.gz安装包

Libevent 的简单实用_libevent粘包处理-程序员宅基地

文章浏览阅读212次。轻量级网络库Libevent对高效的I/O进行了封装,提供统一的API,我们调用API就会很方便,要搞清楚每个API背后的操作。 什么是高效的I/O??? 如Linux中独有的epoll,windows的IOCP,BSD的Kqueque我使用的是libevent2.0.21版本, Libevent2.0版本以后提供了buffere..._libevent粘包处理

python数据分析论文报告_python数据报告-程序员宅基地

文章浏览阅读1.8k次。广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!处理数据的 pandas,绘制可视图的 matplotlib,生成交互图的 bokeh,实现机器学习的 scikit-learn 等等,python 数据分析师早就能把这些工具用得出神入化了。 但今天呆鸟要和大家聊一聊 python 数据分析报告的痛点。 ----用 python 做..._python数据分析论文

0.从零搭建VUE项目,语言使用TypeScript_vue项目使用什么语言写-程序员宅基地

文章浏览阅读270次。搭建vue项目准备项目创建准备你需要安装nodejs,如已安装,请跳过。项目创建Install Vue CLI, 如果尚未安装npm install --global @vue/cli@next --registry=https://registry.npm.taobao.org2.创建一个新项目, 选择 “Manually select features” 选项vue create my-project-name如果已经有一个不存在TypeScript的 Vue CLI项目,请添_vue项目使用什么语言写

30岁,转行学编程靠谱吗?_32岁转行编程-程序员宅基地

文章浏览阅读4.7k次,点赞5次,收藏6次。前几天在知乎上,刷到这么一个问题鉴于有不少人看了我的blog给我私信一些职业规划相关的问题,讨论很多的就是担心自己年龄是否还适合转行。 于是决定静心下来码了一篇回答,同时搬到博客园来供大家消遣。。。--------------------------下面是原文-----------------------------先说结论,大龄青年不建议转行学IT,因为你已经..._32岁转行编程

随便推点

Activiti6.0-写在前面的话_activiti6.0 database执行语句-程序员宅基地

文章浏览阅读111次。Activiti是什么当你打开这篇博客时,说明你还不知道Activiti是什么,那么工作流引擎对你来说也是新的概念,我这里不去copy百度百科了,简单说Activiti是一个开源的自动化业务工作引擎,担有一点不要和Android的Activity搞混了。为什么使用工作流引擎简单来说,当你在复杂的业务流程中过多的使用if…else那是超级崩溃的,我不知道你们有没有这样的经历,我曾经在一个..._activiti6.0 database执行语句

山东大学计算机组成与设计实验六 二进制补码加法器实验_补码加法器实验报告-程序员宅基地

文章浏览阅读2.9k次,点赞12次,收藏67次。山东大学计算机组成与设计实验六二进制补码加法器实验,山东大学计算机组成与设计实验,山东大学计算机组成与设计实验报告,计算机组成原理实验报告,山东大学计算机组成原理实验报告。_补码加法器实验报告

安卓rpg游戏存档位置_RPGMakerMV探秘02-存档-程序员宅基地

文章浏览阅读1.5w次。一般情况下,RPGMaker都是单机游戏,单机游戏必然会涉及到存档,本文我们就来聊一聊RPGMakerMV的存档。 探秘系列的第一篇我们已经介绍,引擎存档位置在save目录下。 其实新建项目时,是不存在save目录的,当进行存档时,才会新建save目录。 不使用插件的情况下,存档位置有20个,如果超过了20就只能覆盖之前的存档。当我进行首次存档时(选的第一个存档位置)..._安卓黄油存档位置

PyQt5-QLineEdit限制文本输入框_pyqt5 限制文本框字数-程序员宅基地

文章浏览阅读2.9k次。# encoding: utf-8'''===================================================@Project -> File : qt5003 -> QLineEditValidator.py@IDE : qt5003@Author : Mr. Batac@Date ..._pyqt5 限制文本框字数

ajax 怎么获取id节点,通过ajax 后台传递的 区域id 选中ztree的节点 并展开节点-程序员宅基地

文章浏览阅读398次。代码如下:< script type = "text/javascript" >var flag = "flag ")%>";if (flag != "true") {flag = false;} else {flag = true;}var reginTree = {setting: {view: {fontCss: {color: "#000"}},check: {enabl..._ajax获取ztree新增父节点

推荐文章

热门文章

相关标签