• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-打开目录readdir

01/07 15:41
371
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1.头文件

#include <dirent.h>

2.函数原型

struct dirent *readdir(DIR *dirp);

3.参数

dirp:指向由 opendir() 返回的 DIR 结构体的指针,用于表示打开的目录流。

4.返回值

成功:返回指向 dirent 结构体的指针,该结构体包含目录项的信息。

结束或错误:当目录项读取完毕或发生错误时,返回 NULL。通常,readdir 返回 NULL 表示目录读取结束,或者遇到错误时可以通过 errno 获取更多信息。

注:

流是抽象的一个数据通道,目录流(DIR 类型的对象)是一个表示打开目录的抽象数据通道。通过这个流,我们可以按顺序读取目录中的每一个条目。

下面就来介绍一下struct dirent结构体:

struct dirent {

ino_t d_ino;       /* Inode 编号 */

off_t          d_off;       /* Not an offset; see below */

unsigned  short d_reclen;    /* Length of this record */

unsigned  char   d_type;      /* Type of file; not supported by all filesystem types */

char            d_name[256]; /* 文件名 */

};

在这个结构体中,需要重点关注的是d_ino和d_name这两个字段即可,其余的字段一般是用不上,所以不用重点关注。

每调用一次readdir函数,就会从drip所指向的目录有中读取下一条目录项,并返回一个struct dirent结构体指针,指向经静态分配而得的 struct dirent 类型结构,每次调用 readdir()都会覆盖该结构。一旦遇到目录结尾或是出错,readdir()将返回 NULL,针对后一种情况,还会设置 errno 以示具体错误。

这时就有问题了,什么时候是指向了目录的末尾,什么时候是出错了呢?以下给出代码参考进行判断:

struct dirent *entry;

// 读取目录项

while ((entry = readdir(dir)) != NULL) {

// 打印目录项名称

printf("Name: %sn", entry->d_name);

}

// 检查是否有读取错误

if (errno != 0) {

perror("readdir");

closedir(dir);

return EXIT_FAILURE;

}

需要注意的是,在使用readdir()函数时,返回的内容并非是使用文件名进行排序的,而是取决于文件系统向该目录添加文件时所遵循的顺序,和在文件被删除以后对目录列表中空隙的填补方式进行排序。

飞凌嵌入式

飞凌嵌入式

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。收起

查看更多

相关推荐