Linux编程--readdir
2020-04-13 本文已影响0人
None_Ling
作用
在Linux中, readdir
是常用来遍历文件夹下的文件
使用方法
通常readdir
都是与opendir
配合使用. 通过opendir
打开的目录, 使用readdir
来进行遍历读取
#include <sys/types.h>
#include <dirent.h>
// 通过全路径打开目录
DIR *opendir(const char *name);
// 通过目录的fd来打开
DIR *fdopendir(int fd);
#include <dirent.h>
// 传入DIR, 返回目录相关信息
struct dirent *readdir(DIR *dirp);
// 在glibc的2.1.9版本前使用该函数, 而后使用readdir代替
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
返回的dirent
即 : directory_entry
, 结构如下
struct dirent {
ino_t d_ino; // 文件的inode
off_t d_off; // 该文件相对于文件夹的偏移量
unsigned short d_reclen; // d_name的长度
unsigned char d_type; // 文件类型, 例如管道, Socket , Block等
char d_name[256]; // 文件名
};
事例
例如查找一个目录下为name
的文件
DIR * dirp = NULL;
// 通过opendir打开目录
dirp = opendir(".");
if (dirp == NULL) {
return (ERROR);
}
len = strlen(name);
dirent * dp = NULL;
// 开始遍历dirp文件夹
while ((dp = readdir(dirp)) != NULL) {
// 比较dp->d_name与name的值, 如果匹配则返回
if (dp->d_namlen == len && strcmp(dp->d_name, name) == 0) {
(void)closedir(dirp);
return (FOUND);
}
}
// 关闭dir
(void)closedir(dirp);
return (NOT_FOUND);