DIR、dirent、stat结构体详解(转)
- 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);
- 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结构体中。
- 以下为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结构体详解(转)相关推荐
- 【FFmpeg】结构体详解(二):AVStream、AVPacket、AVOutputFormat
FFmpeg结构体详解 7.AVStream 8.AVPacket 9.AVOutputFormat 7.AVStream AVStream 是存储每一个视频/音频流信息的结构体. 重要的变量如下所示 ...
- 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext
FFmpeg结构体详解 一.FFmpeg中最关键的结构体之间的关系 1.解协议(http,rtsp,rtmp,mms) 2.解封装(flv,avi,rmvb,mp4) 3.解码(h264,mpeg2, ...
- 计算机科学类专升本复习之“C语言结构体”详解(初稿)
C语言结构体详解,C语言struct用法详解 前面所学到的"数组":它是一组具有"相同类型"的数据的集合. 但是在实际的编程中,我们往往还需要 一组" ...
- C语言结构体详解(结构体定义,使用,结构体大小等)
c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...
- C# 之 结构体详解
C# 之 结构体详解 一.结构体的定义 二.结构体的初始化 1.实例构造函数 2.静态构造函数 三.结构体的使用 1.赋值操作 2.作为方法参数和返回值 一.结构体的定义 概念:C#的结构体类型(或称 ...
- windows内核开发笔记七:内核开发OVERLAPPED结构体详解
windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHi ...
- Linux下DIR,dirent,stat等结构体详解(转)
最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...
- dir结构体 linux_Linux下DIR,dirent,stat等结构体详解
最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct__dirstrea ...
- Linux下DIR,dirent,stat等结构体详解
最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...
最新文章
- java中怎样判断余数为3,Java的基础语法(三): 运算符
- mysql支持的并发数_重学MySQL系列(五):谈谈对MySQL的存储引擎的理解
- 清除linux缓存命令
- [十问] 软件基础知识
- 程序员面试金典 - 面试题 17.13. 恢复空格(DP+Trie树)
- 程序员6年换了8份工作,工资从4.5K涨到40K,网友问:谁敢要你?
- mysql 深入视图和索引
- 有关send()和recv()函数的理解
- sqlserver存储过程学习
- IDEA的第一个java程序
- ocjp 考试题之六
- crt是什么意思 windows编程_从零开始,学习windows编程 - hello.c的疑惑!
- sonic云真机linux分布式部署
- CSR867x — CSR8670平台开发调试经验
- 计算机语言晦涩难懂? 别怕 我来C
- 批量压缩多文件-批处理(四)
- 自定义expendableListView实现与QQ联系人一样效果的通讯录
- 标准粒子群C语言程序
- html5怎么实现展开收起,小程序实现展开/收起的效果示例
- C++_类中的6个默认成员函数
热门文章
- 《工具箱-服务器相关》FTP服务器vsftpd配置项-主目录限制(chroot_local_user、chroot_list_enable)
- 惠普锐14锐龙版从使用感受到内存升级建议
- 【MATLAB数字图像处理】四叉树分割图像
- 日本IT工程师的长短处
- DSP实验报告—实验3 编写一个以汇编(ASM)语言为基础的DSP程序
- Maven安装教程以及IDEA配置详解(IDEA版)
- FFmpeg入门详解之75:FFmpeg转码器Java版之系统分析与设计
- tftp服务配置的详细过程,简单快速
- Vijos - 拼拼图的小杉(背包)
- PM981/PM981a安装黑苹果(第七版)