温馨提示×

ubuntu readdir是否支持符号链接

小樊
45
2026-10-18 07:55:00
栏目: 智能运维

在 Ubuntu(Linux) 中,readdir 是支持符号链接(symbolic link)的,但需要明确一点:

1. 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);
    }
}

2. d_type 与符号链接

在 Ubuntu 上(通常使用 ext4 / xfs):

  • entry->d_type == DT_LNK 表示这是一个符号链接
  • 有些文件系统(如某些网络文件系统)可能 d_type == DT_UNKNOWN,这时需要用 lstat() 判断

3. 是否“跟随”符号链接

  • readdir:不跟随
  • stat:跟随
  • lstat:不跟随

如果你想知道符号链接指向哪里,需要:

char buf[256];
readlink(path, buf, sizeof(buf));

4. 总结

✅ Ubuntu 的 readdir 支持符号链接
✅ 能识别目录中的符号链接
❌ 不会解析符号链接内容

如果你愿意,我可以给你一个完整的 C 示例,演示如何遍历目录并区分符号链接。

0 踩