简短结论:Linux 下 readdir() 本身对“单个目录项(文件名)长度”和“一次读取的条目数”都有一定限制,但目录总大小(条目数量)原则上没有硬性上限,主要受文件系统、内存和内核实现的限制。
下面分点说明:
readdir() 本身的限制readdir() 返回的 struct dirent 中:char d_name[256];
所以 单个文件名不能超过 255 字节(含结尾 \0)readdir() 一次只返回一个目录项getdents() / getdents64() 实现readdir()例如:
readdir() 对 超大目录 会:
| 项目 | 限制 |
|---|---|
| 文件名长度 | 255 字节 |
| 路径长度 | PATH_MAX = 4096 |
| 单目录文件数 | 无硬上限 |
| readdir 返回 | 一次一个条目 |
readdir()没有“目录大小”的硬限制,但有文件名 255 字节限制;超大目录在 Linux 上是允许的,但性能和工程上不推荐。
如果你关心的是:
getdents64、并行遍历)可以继续问。