1. 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)};typedef struct __dirstream DIR;

DIR结构体类似于FILE,是一个内部结构。函数 DIR *opendir(const char *pathname),即打开文件目录,返回指向DIR结构体的指针,以下几个函数使用使用该DIR指针:

 struct dirent *readdir(DIR *dp);void rewinddir(DIR *dp);int closedir(DIR *dp);long telldir(DIR *dp);void seekdir(DIR *dp,long loc);
  1. dirent结构体,从定义能够看出,dirent不仅仅指向目录,还指向目录中的具体文件,readdir函数同样也读取目录下的文件,这就是证据。以下为dirent结构体的定义:
 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字符 */}

以上可看出,dirent结构体存储的关于文件的信息很少,所以dirent同样也是起着一个索引的作用,如果想获得类似ls -l那种效果的文件信息,必须要靠stat函数了。

通过readdir函数读取到的文件名存储在结构体dirent的d_name成员中,而函数

int stat(const char *file_name, struct stat *buf);

的作用就是获取文件名为d_name的文件的详细信息,存储在stat结构体中。

  1. 以下为stat结构体的定义:
struct stat {mode_t     st_mode;         //文件访问权限ino_t      st_ino;          //索引节点号dev_t      st_dev;           //文件使用的设备号dev_t      st_rdev;           //设备文件的设备号nlink_t    st_nlink;          //文件的硬连接数uid_t      st_uid;         //所有者用户识别号gid_t      st_gid;            //组识别号off_t      st_size;       //以字节为单位的文件容量time_t     st_atime;       //最后一次访问该文件的时间time_t     st_mtime;          //最后一次修改该文件的时间time_t     st_ctime;          //最后一次改变该文件状态的时间blksize_t st_blksize;       //包含该文件的磁盘块的大小blkcnt_t   st_blocks;         //该文件所占的磁盘块};

总结一下,想要获取某目录下(比如a目下)b文件的详细信息,我们应该怎样做?

(1) 首先,我们使用opendir函数打开目录a,返回指向目录a的DIR结构体c。

(2) 接着,我们调用readdir( c)函数读取目录a下所有文件(包括目录),返回指向目录a下所有文件的dirent结构体d。

(3) 然后,我们遍历d,调用stat(d->name,stat *e)函数来获取每个文件的详细信息,存储在stat结构体e中。

在这一过程中,三种结构体扮演着不同的角色。

DIR、dirent、stat结构体详解(转)相关推荐

  1. 【FFmpeg】结构体详解(二):AVStream、AVPacket、AVOutputFormat

    FFmpeg结构体详解 7.AVStream 8.AVPacket 9.AVOutputFormat 7.AVStream AVStream 是存储每一个视频/音频流信息的结构体. 重要的变量如下所示 ...

  2. 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext

    FFmpeg结构体详解 一.FFmpeg中最关键的结构体之间的关系 1.解协议(http,rtsp,rtmp,mms) 2.解封装(flv,avi,rmvb,mp4) 3.解码(h264,mpeg2, ...

  3. 计算机科学类专升本复习之“C语言结构体”详解(初稿)

    C语言结构体详解,C语言struct用法详解 前面所学到的"数组":它是一组具有"相同类型"的数据的集合. 但是在实际的编程中,我们往往还需要 一组" ...

  4. C语言结构体详解(结构体定义,使用,结构体大小等)

    c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...

  5. C# 之 结构体详解

    C# 之 结构体详解 一.结构体的定义 二.结构体的初始化 1.实例构造函数 2.静态构造函数 三.结构体的使用 1.赋值操作 2.作为方法参数和返回值 一.结构体的定义 概念:C#的结构体类型(或称 ...

  6. windows内核开发笔记七:内核开发OVERLAPPED结构体详解

    windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED {   DWORD Internal;   DWORD InternalHi ...

  7. Linux下DIR,dirent,stat等结构体详解(转)

    最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...

  8. dir结构体 linux_Linux下DIR,dirent,stat等结构体详解

    最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct__dirstrea ...

  9. Linux下DIR,dirent,stat等结构体详解

    最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...

最新文章

  1. java中怎样判断余数为3,Java的基础语法(三): 运算符
  2. mysql支持的并发数_重学MySQL系列(五):谈谈对MySQL的存储引擎的理解
  3. 清除linux缓存命令
  4. [十问] 软件基础知识
  5. 程序员面试金典 - 面试题 17.13. 恢复空格(DP+Trie树)
  6. 程序员6年换了8份工作,工资从4.5K涨到40K,网友问:谁敢要你?
  7. mysql 深入视图和索引
  8. 有关send()和recv()函数的理解
  9. sqlserver存储过程学习
  10. IDEA的第一个java程序
  11. ocjp 考试题之六
  12. crt是什么意思 windows编程_从零开始,学习windows编程 - hello.c的疑惑!
  13. sonic云真机linux分布式部署
  14. CSR867x — CSR8670平台开发调试经验
  15. 计算机语言晦涩难懂? 别怕 我来C
  16. 批量压缩多文件-批处理(四)
  17. 自定义expendableListView实现与QQ联系人一样效果的通讯录
  18. 标准粒子群C语言程序
  19. html5怎么实现展开收起,小程序实现展开/收起的效果示例
  20. C++_类中的6个默认成员函数

热门文章

  1. 《工具箱-服务器相关》FTP服务器vsftpd配置项-主目录限制(chroot_local_user、chroot_list_enable)
  2. 惠普锐14锐龙版从使用感受到内存升级建议
  3. 【MATLAB数字图像处理】四叉树分割图像
  4. 日本IT工程师的长短处
  5. DSP实验报告—实验3  编写一个以汇编(ASM)语言为基础的DSP程序
  6. Maven安装教程以及IDEA配置详解(IDEA版)
  7. FFmpeg入门详解之75:FFmpeg转码器Java版之系统分析与设计
  8. tftp服务配置的详细过程,简单快速
  9. Vijos - 拼拼图的小杉(背包)
  10. PM981/PM981a安装黑苹果(第七版)