在 CentOS(以及一般的 Linux 系统)上,readdir 本身是阻塞的。
readdir 是什么readdir 是 POSIX 标准函数(<dirent.h>)DIR *)中的下一个目录项✅ 会阻塞
readdir 是一个 同步(阻塞)系统调用封装getdents / getdents64readdir_r 的关系readdir_r 也是 阻塞的如果你需要“非阻塞读取目录”,常见做法:
// 单独线程调用 readdir
// 主线程不阻塞
io_uring 目前也不支持目录遍历open + getdents(仍阻塞)本质一样
| 项目 | 说明 |
|---|---|
| 是否阻塞 | ✅ 是 |
| 是否线程安全 | ❌ readdir 否,readdir_r 是 |
| 能否异步 | ❌ 不支持 |
| CentOS 行为 | 与标准 Linux 一致 |
如果你有具体场景(比如高并发服务、NFS、超大目录),我可以给你更合适的方案。