在 Debian(以及所有 Linux/Unix 系统)里,readdir 并不是 Debian 独有的命令,而是 C 语言标准库(glibc)中的一个函数,用于读取目录内容。
readdir 是什么?readdir 是 POSIX 标准定义的 目录读取函数,原型如下:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
作用:从已打开的目录流中,读取下一个目录项(文件或子目录)。
当你用 opendir() 打开一个目录后,就可以用 readdir() 逐个读取里面的内容,例如:
它常用于:
ls 类程序#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir("/etc");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
输出示例:
passwd
hostname
network
...
readdir 返回的内容返回的是一个 struct dirent 结构,常用字段:
struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型
char d_name[]; // 文件名
};
常见 d_type:
DT_REG:普通文件DT_DIR:目录DT_LNK:符号链接| 函数 | 作用 |
|---|---|
opendir |
打开目录 |
readdir |
读取目录项 |
closedir |
关闭目录 |
readdir_r |
线程安全版本(已不推荐) |
scandir |
一次性读取并排序目录 |
在 Debian 中,很多命令的底层实现都用到 readdir,例如:
/bin/lsfinddursync(部分逻辑)如果你在 Debian 上写 C 程序,它直接来自 libc6(glibc)。
❌ readdir 不是 shell 命令
✅ 它是 C 函数
❌ 不会自动递归子目录
✅ 需要自己递归调用
如果你是想问:
. 和 ..可以继续问我。