在 Ubuntu(Linux) 中,readdir 是支持符号链接(symbolic link)的,但需要明确一点:
readdir 本身的行为readdir()(以及 readdir_r)只是读取目录项(directory entry),它返回的是目录里的文件名和对应的 d_type / inode 信息。
readdir 会把它当成一个普通目录项返回示例:
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_LNK) {
printf("%s is a symlink\n", entry->d_name);
}
}
d_type 与符号链接在 Ubuntu 上(通常使用 ext4 / xfs):
entry->d_type == DT_LNK 表示这是一个符号链接d_type == DT_UNKNOWN,这时需要用 lstat() 判断readdir:不跟随stat:跟随lstat:不跟随如果你想知道符号链接指向哪里,需要:
char buf[256];
readlink(path, buf, sizeof(buf));
✅ Ubuntu 的 readdir 支持符号链接
✅ 能识别目录中的符号链接
❌ 不会解析符号链接内容
如果你愿意,我可以给你一个完整的 C 示例,演示如何遍历目录并区分符号链接。