在 CentOS(以及一般 Linux 系统) 中,readdir() 是支持符号链接(symbolic link)的,但需要明确一点:
readdir() 本身的行为readdir()(及 readdir_r())用于读取目录项d_typereaddir() 会返回该符号链接本身的名字示例(struct dirent):
struct dirent {
ino_t d_ino;
off_t d_off;
unsigned short d_rendtl;
unsigned char d_type; // 文件类型
char d_name[256];
};
符号链接的 d_type 通常是:
DT_LNK
if (entry->d_type == DT_LNK) {
// 这是一个符号链接
}
⚠️ 注意:
d_type == DT_UNKNOWNlstat() 进一步判断readdir() 不会递归进入符号链接指向的目录lstat()
if (S_ISLNK(...)) {
// 用 realpath / stat 处理
}
readdir() 遍历的是 符号链接指向的目录本身(例如 opendir("/path/link"),而 link 指向目录):
opendir() 会跟随符号链接readdir() 返回的是目标目录里的真实文件✅ CentOS 的 readdir() 支持符号链接
✅ 能识别符号链接(通过 d_type 或 lstat)
❌ 不会自动解析符号链接内容
如果你有具体场景(比如递归遍历、避免死循环、备份工具等),我可以给你示例代码。