opendir()函数:
头文件:

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

函数原型:

Dir* opendir(const char* pathname);

函数功能:
获取pathname目录下的所有文件和目录的列表,如果pathname是个文件或失败则返回NULL,并设置errno
返回值DIR结构体的原型为:struct _dirstream
typedef struct _dirstream DIR;

struct _dirstream
{void* _fd;char* _data;int _entry_data;char* _ptr;int _entry_ptr;size_t _allocation;size_t _size;_libc_lock_define (,_lock)
};

readdir()函数:
头文件:#include <dirent.h>
函数原型:

struct dirent *readdir(DIR *dir_handle);

函数功能:读取opendir返回的那个列表

struct dirent
{long d_ino; /* inode number 索引节点号 */off_t d_off; /* offset to this dirent 在目录文件中的偏移 */unsigned short d_reclen; /* length of this d_name 文件名长 */unsigned char d_type; /* the type of d_name 文件类型 */char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */};

其中d_type文件类型又有如下情况:

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

演示示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>// main 函数的 argv[1] char * 作为 所需要遍历的路径 传参数给 listDir
void listDir(char *path)
{   DIR *pDir;//定义一个 DIR 类的指针struct dirent *ent;//定义一个结构体 dirent 的指针,dirent 结构体见上int i = 0;    char childpath[512];//定义一个字符数组,用来存放读取的路径pDir = opendir(path); //opendir 方法打开 path 目录,并将地址付给 pDir 指针memset(childpath, 0, sizeof(childpath)); //将字符数组 childpath 的数组元素全部置零//读取 pDir 打开的目录,并赋值给 ent, 同时判断是否目录为空,不为空则执行循环体while ((ent = readdir(pDir)) != NULL){//读取 打开目录的文件类型 并与 DT_DIR 进行位与运算操作,即如果读取的 d_type 类型为                     //DT_DIR (=4 表示读取的为目录)if (ent->d_type & DT_DIR) {if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {//如果读取的 d_name 为 . 或者.. 表示读取的是当前目录符和上一目录符, 用 //contiue 跳过,不进行下面的输出continue;}//如果非. ..则将 路径 和 文件名 d_name 付给 childpath, 并在下一行 prinf 输出sprintf(childpath, "%s/%s", path, ent->d_name);printf("path:%s\n", childpath);//递归读取下层的字目录内容, 因为是递归,所以从外往里逐次输出所有目录(路径+目录名)//然后才在 else 中由内往外逐次输出所有文件名listDir(childpath);}//如果读取的 d_type 类型不是 DT_DIR, 即读取的不是目录,而是文件,则直接输出 d_name, 即输出文件名elseprintf("%s\n", ent->d_name);}
}int main(int argc, char *argv[])
{listDir(argv[1]); //第一个参数为想要遍历的linux目录。例如,当前目录为 ./ ,上一层目录为../return 0;
}

Linux下 C 遍历目录(opendir,readdir函数)相关推荐

  1. Linux下 C++遍历目录文件

     可参考如下代码或者参考链接博客. 测试代码: #include <iostream> #include <stdio.h> #include <unistd.h> ...

  2. linux下C++遍历文件夹下的全部文件;Windows/Linux下C++批量修改文件名,批量删除文件...

    Linux下 C++遍历目录下所有文件 1 rename(image_path.c_str(), image_path_new.c_str()); 2 remove(image_path_move.c ...

  3. linux下的主要目录

    2019独角兽企业重金招聘Python工程师标准>>> [Linux系统目录结构] 登录系统后,在当前命令窗口下输入 ls / 你会看到 以下是对这些目录的解释: /bin bin是 ...

  4. Linux_linux基础命令(增删查,权限,Linux下的重要目录,重要命令(. du, df, top, free, pstack, su, sudo).安装gcc/g++, gdb, vim )

    r:表示可读w:表示可写x:表示可执行也可以用数字表示这一点我们会在修改文件权限说明.对于文件夹的rwx表示:r表示可读及可以查看文件夹内容可以ls查看w表示可写及可以向文件夹中传送内容如文件x表示可 ...

  5. linux 设备数 of,linux下devicetree中惯用的of函数

    linux下devicetree中常用的of函数 从device_node中获取信息: int of_property_read_u8_array(const struct device_node * ...

  6. Linux下使用C语言访问MySQL函数

    //mysqlVersion.c /************************************************************* FileName : mysqlVers ...

  7. mysql 多数据库文件_今天突然发现我的Linux下MySQL数据库目录多了好多文件

    今天再次重现Blog了,虽然很忙,还是要来写一下Blog的,嘻,首先还是一样先谢谢Sery 今天发现了我的Linux下Mysql数据库目录多了好多Mysql-bin.0000X这些文件,经过自己查找资 ...

  8. ​Linux下C如何调用PCI Lib函数

    Linux下C如何调用PCI Lib函数 在Linux下,可以通过"setpci"和"setpci"命令来访问PCI设备的配置空间,那么能否用程序来访问PCI ...

  9. 怎么查这个文件在linux下的哪个目录

    因为要装pl/sql所以要查找tnsnames.ora文件..看看怎么查这个文件在linux下的哪个目录 find / -name tnsnames.ora 查到: /opt/app/oracle/p ...

最新文章

  1. PCL中3D特征描述子Shot详解
  2. mysql和mybatis面试题_2020年,MyBatis常见面试题总结
  3. npm install -g -S -D的区别及应用场景
  4. boost::system::generic_category相关的测试程序
  5. 【数据结构】二叉树的存储和遍历
  6. Java Swagger的注释类是怎么被调用到的
  7. 31模板方法(Template Method)
  8. (第七天)DOM练习一
  9. PHP网站开发有哪些框架,罗列几款时下高人气的PHP开发框架
  10. ios实例开发精品文章推荐(8.13)
  11. oracle spfile和pfile文件(转)
  12. 职业生涯(一)——你就是自己想要成为的那个人!
  13. Git提交代码的处理流程(转)
  14. 8路USB继电器模块 windows Linux使用
  15. 2.证券投资基金的概述
  16. 聊一哈,新入如何优雅的跟老板打招呼
  17. AI作画的人机战争走向何方?
  18. centos7下安装pg数据库
  19. Android——百度语音唤醒
  20. 商业智能BI企业管理决策之经营管理会议

热门文章

  1. java写家书_致诸弟·述求学之方法(曾国藩家书)
  2. PCA主成分分析教程(origin分析绘制,无须R语言)
  3. 读懂企业的七步成诗法
  4. 英语发音规则---I字母
  5. 激光雷达 eai g6_如何配置TAMeb 6.0 EAI以实现复杂的身份验证要求
  6. 图灵的停机问题背后令人着迷的数学(哲学)原理
  7. ADI官网 hdl代码及sdk工程编译过程
  8. 28岁程序员的逃跑计划,从送外卖开始
  9. 时间序列神器之争:prophet VS lstm
  10. java 开源商城_让这个Java语言的开源商城系统火起来