在 linux 下遍历某一目录下内容 LINUX 下历遍目录的方法一般是这样的:

打开目录->读取->关闭目录

相关函数是 opendir -> readdir -> closedir,其原型如下:

#include <dirent.h>
DIR *opendir(const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

dirent 结构体定义:

struct dirent{
#ifndef __USE_FILE_OFFSET64__ino_t d_ino;__off_t d_off;
#else__ino64_t d_ino;__off64_t d_off;
#endifunsigned short int d_reclen;unsigned char d_type;char d_name[256];        /* We must not include limits.h! */};

其中 inode 表示存放的是该文件的结点数目(具体可了解 linux 下的文件系统);

d_off 是文件在目录中的编移,这两个基本很少用。
d_type 表示文件类型:

enum
{DT_UNKNOWN = 0,         //未知类型
# define DT_UNKNOWN DT_UNKNOWNDT_FIFO = 1,            //管道
# define DT_FIFO DT_FIFODT_CHR = 2,             //字符设备
# define DT_CHR DT_CHRDT_DIR = 4,             //目录
# define DT_DIR DT_DIRDT_BLK = 6,             //块设备
# define DT_BLK DT_BLKDT_REG = 8,             //常规文件
# define DT_REG DT_REGDT_LNK = 10,            //符号链接
# define DT_LNK DT_LNKDT_SOCK = 12,           //套接字
# define DT_SOCK DT_SOCKDT_WHT = 14             //链接
# define DT_WHT DT_WHT
};
d_name表示文件名,如test.jpg

栗子:linux C 遍历目录及其子目录 举例:

#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 类的指针DIR *pDir;//定义一个结构体 dirent 的指针,dirent 结构体见上struct dirent *ent;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, 即输出文件名else {printf("%s\n", ent->d_name);}}
}int main(int argc, char *argv[])
{listDir(argv[1]); //第一个参数为 想要遍历的 linux 目录 例如,当前目录为 ./ ,上一层目录为../return 0;
}

gcc -o main ./main.c

转载:linux C 遍历目录及其子目录 opendir -> readdir -> closedir_angle_birds的博客-CSDN博客

(SAW:Game Over!)

linux C 遍历目录及其子目录 opendir -> readdir -> closedir相关推荐

  1. linux opendir readdir closedir 的使用

    2012-06-04 10:27 linux opendir readdir closedir 的使用 在Linux下opendir().readdir()和closedir()这三个函数主要用来遍历 ...

  2. linux c 读取目录及其子目录下所有.jpg文件的文件名(无后缀)

    此程序用来生成<yolo v2中VOC数据生成labels所需的图片文件名文档>train.txt linux c 读取目录及其子目录下所有.jpg文件的文件名:   http://www ...

  3. linux列出一个目录及其子目录下面的某种类型的文件

    linux列出一个目录及其子目录下面的某种类型的文件 作者:smarteng ⁄ 时间:2009年07月09日 ⁄ 分类: Linux命令 ⁄ 评论:0 怎么样把,一个目录及其所有的子目录下面的某种类 ...

  4. linux脚本遍历目录,shell脚本递归遍历目录及子目录的例子分享

    用shell写的递归遍历目录的脚本,脚本实现递归遍历指定目录,打印目录下的文件名. 实例1: 复制代码 代码如下: #!/bin/sh function scandir() { local cur_d ...

  5. window和linux下遍历目录的比较

    window下,遍历目录主要是用FindFirstFile和FindNextFile,而linux下是用opendir和readdir实现 void scanFile(char *szDir) {WI ...

  6. linux c 遍历目录 及 目录下文件

    目录 递归实现 非递归实现 我们知道,许多操作系统中的目录结构都是使用树结构. 使用递归的方法定义树是比较容易的.一棵树地一些节点的集合. 这个集合可以为空,若非空,则树由树根和0个或者多个非空的子树 ...

  7. linux下遍历目录树方法总结,linux下遍历目录树方法总结(下)

    2.使用ftw调用遍历目录 2.1ftw函数族 使用readdir函数等实现递归遍历目录树的方法比较原始,glibc2.1收录了ftw等函数,可以方便实现目录树的遍历. #include intftw ...

  8. Linux对一个目录及其子目录所有文件添加权限

    1.chmod指令 chmod是一个改变用户拥有指定文件的权限的命令.r:只读,w:写,x执行.也可以用数字 -rw------- (600) -- 只有属主有读写权限.   -rw-r--r-- ( ...

  9. c#里有遍历目录及子目录以树的形式展现

    protected void Button1_Click(object sender, EventArgs e)<?XML:NAMESPACE PREFIX = O /> { TreeVi ...

最新文章

  1. const与readonly,析构函数,虚拟方法
  2. Material Design之ActionBar、ToolBar
  3. python对文件的读操作方法有哪些-python--文件的读写操作
  4. TensorFlow基于cifar10数据集实现进阶的卷积网络
  5. 交叉编译openwrt php,构建 openwrt 交叉编译工具链
  6. Effective Java之使类和成员的可访问性最小化(十三)
  7. ASP.NET Core MVC中的 [Required]与[BindRequired]
  8. 数据库错误 ERROR 1366 (HY000): Incorrect string value: ‘\xD4\xF8\xBB\xAA‘ for column ‘Sname‘ at row 1解决
  9. 分布式数据库clickhouse、tidb、palo对比
  10. java安装找不到uri,【找不到与请求 URI匹配的 HTTP 资源】(转)
  11. Linux基本命令介绍
  12. DOM基础、定时器、BOM基础
  13. HTML中input是啥意思,HTML中input是什么意思
  14. 《区块链原理、设计与应用》一3.8 本章小结
  15. SQL日历表数据的简单生成
  16. php中explorer,explorer.php
  17. 码农小汪-Java Condition
  18. PDG格式转换PDF格式的方法
  19. c语言程序仪表称重编程,液体原料自动称重配料系统(软件设计)本科毕业设计(论文).doc...
  20. Java求时间差(日期差)

热门文章

  1. 51nod 1631 小鲨鱼在51nod小学 【线段树--】
  2. JS实现百度地图搜索悬浮窗功能
  3. 微信和qq哪个服务器好,王者荣耀微信区和QQ区选哪个比较好-王者荣耀哪个区比较好打 - QT软件园...
  4. java安全学习(一)
  5. linux镜像烧录工具,树莓派操作系统镜像烧录方法指南
  6. 前端开发第三方分享/登录功能备忘(facebook、weibo、QQ、weixin微信好友或者朋友圈)
  7. InstructPix2Pix: 随口修图
  8. 关于10G/40G/100G数据中心光纤布线知识
  9. POI XWPFDocument 导出word目录详解
  10. 盟百照相馆影楼摄影工作室选片系统