在 Ubuntu(Linux) 上,readdir 本身是一个同步(阻塞)的系统调用封装,但是否“会阻塞”要看具体场景。
readdir 是什么在 glibc 中:
readdir() / readdir_r() 是对 getdents() / getdents64() 系统调用的封装DIR *dir = opendir("/path");
struct dirent *ent = readdir(dir);
readdir 会阻塞吗?readdir 是 阻塞式 APIreaddir 不会读整个目录,而是分批readdir 会“卡住”?hard 挂载)readdir 触发大量 getdentsreaddir vs readdir_r vs getdents| 函数 | 是否阻塞 | 说明 |
|---|---|---|
readdir |
✅ 阻塞 | 非线程安全 |
readdir_r |
✅ 阻塞 | 线程安全 |
getdents64 |
✅ 阻塞 | 系统调用 |
io_uring |
❌ 可异步 | 新方式 |
pthread_create(&t, NULL, scan_dir, path);
io_uring + getdents64opendir/readdir在 Ubuntu 上,
readdir是阻塞调用,但对本地文件系统通常很快;在 NFS 或异常存储下可能明显卡住。
如果你愿意,我可以: