在 Debian(以及其它 Linux 发行版)里,readdir() 本身是支持“遇到符号链接”的,但它不会自动解析符号链接。
更具体地说:
readdir() 做了什么readdir()(在 <dirent.h> 中)用于读取目录项(directory entry)。
它返回的是目录里的文件名和文件类型信息(d_type),例如:
符号链接在目录里,就是一个“DT_LNK 类型的目录项”。
所以 readdir() 能读到符号链接,并且可以通过 d_type == DT_LNK 判断它是一个符号链接。
readdir() 不会解析符号链接readdir() 不会帮你判断符号链接指向的是文件还是目录。
如果你想知道符号链接指向什么,需要额外调用:
stat() → 得到符号链接本身的信息lstat() → 得到符号链接本身(不解析)readlink() → 读取符号链接指向的路径realpath() → 解析符号链接为绝对路径struct dirent *entry;
DIR *dir = opendir("/some/dir");
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_LNK) {
// 这是一个符号链接
}
}
d_type 在某些文件系统上可能返回 DT_UNKNOWN(老式 FS 或某些网络文件系统)readdir() 本身✅ Debian 的 readdir() 支持符号链接
❌ 但它不解析符号链接,只是把它当作一种目录项返回
如果你是在写程序、做递归遍历、或者处理 FTP / NFS / SMB 场景,我可以给你更具体的示例。