在 Linux 中,readdir 是用于读取目录内容的函数,常见于 C 语言编程(POSIX 标准)。它的主要作用是:遍历一个已经打开的目录,逐个获取目录中的文件和子目录信息。
readdir 的基本作用readdir 用来:
NULL它只能读取文件名,不能读取文件内容或详细属性(如大小、权限),如果需要详细信息,还要配合 stat。
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
dirp:由 opendir() 返回的目录流指针struct dirent 的指针NULLstruct dirent 常用成员struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移量
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型
char d_name[]; // 文件名(最重要)
};
⚠️ 不同系统字段可能略有差异
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
if (dir == NULL) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
输出示例:
.
..
main.c
test.txt
subdir
. 和 ... 表示当前目录.. 表示上级目录通常需要过滤:
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
readdir 不是线程安全的readdir_r(已逐渐废弃)readdir + 单线程或加锁想要文件大小、权限、修改时间:
stat(entry->d_name, &sb);
| 函数 | 作用 |
|---|---|
opendir |
打开目录 |
readdir |
读取目录项 |
closedir |
关闭目录 |
scandir |
读取并排序目录 |
getdents |
更底层系统调用 |
readdir的作用就是:在 Linux 中遍历目录,逐个获取目录里的文件名(目录项)。
如果你愿意,我也可以讲:
readdir vs getdentsreaddir 实现 ls