readdir 是 Linux / UNIX 系统中用于读取目录内容的一个标准库函数,定义在 <dirent.h> 头文件中,通常配合 opendir、closedir 一起使用。
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
dirp:由 opendir() 返回的目录流指针(DIR *)struct dirent 的指针(表示读到的目录项)NULL⚠️ 到达目录末尾和出错都返回
NULL,需要结合errno判断
struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移量
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型
char d_name[256]; // 文件名
};
常用字段:
d_name:文件名(如 "test.txt")d_type:文件类型(如 DT_REG 普通文件,DT_DIR 目录)#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
if (!dir) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
会包含 . 和 ..
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
不是线程安全的
readdir_r(已不推荐)readdir + 单线程或加锁只读取目录项,不递归
| 函数 | 作用 |
|---|---|
opendir |
打开目录 |
readdir |
读取一个目录项 |
closedir |
关闭目录 |
scandir |
一次性读取并排序 |
getdents |
更底层的系统调用 |
如果你愿意,我可以: