在 Debian(以及所有 Linux 系统) 中,readdir 不是一个命令行命令,而是 C 语言标准库函数,用于读取目录内容。因此,它**没有“参数”**像 ls 或 find 那样,而是 函数参数和结构体字段。
下面分情况说明:
readdir 是什么?readdir 属于 POSIX / glibc 接口,用于遍历目录流。
头文件:
#include <dirent.h>
readdir 函数的原型struct dirent *readdir(DIR *dirp);
| 参数 | 说明 |
|---|---|
DIR *dirp |
目录流指针,由 opendir() 返回 |
⚠️ 只有 1 个参数
readdir 返回值(struct dirent)readdir 返回的是一个结构体指针:
struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移量(不建议直接使用)
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型(部分文件系统支持)
char d_name[256]; // 文件名
};
d_type 值(可选)| d_type | 含义 |
|---|---|
| DT_REG | 普通文件 |
| DT_DIR | 目录 |
| DT_LNK | 符号链接 |
| DT_FIFO | 管道 |
| DT_SOCK | 套接字 |
| DT_BLK | 块设备 |
| DT_CHR | 字符设备 |
| DT_UNKNOWN | 未知类型 |
⚠️
d_type并非所有文件系统都支持(如某些网络文件系统)
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
readdir -a
readdir --help
❌ 不支持
readdir 本身没有参数,但可以通过 组合函数 实现:
| 需求 | 使用方式 |
|---|---|
| 排序 | 自己排序 d_name |
| 过滤 | 判断 d_name |
| 读取隐藏文件 | readdir 本身会返回 . 和 .. |
| 非阻塞 | readdir 是阻塞的 |
| 线程安全 | 使用 readdir_r(已废弃)或 readdir + 锁 |
| 函数 | 说明 |
|---|---|
opendir() |
打开目录 |
readdir() |
读取目录项 |
closedir() |
关闭目录 |
rewinddir() |
重置目录流 |
seekdir() / telldir() |
定位目录流 |
scandir() |
带过滤和排序的读取 |
你可能实际需要的是:
ls
find
stat
Debian 中的
readdir没有命令参数,它是 C 函数,只接受一个DIR*参数,依赖struct dirent获取文件信息。
如果你愿意,可以告诉我:
我可以给你更精确的示例。