You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C语言中如何通过编程判断符号链接指向文件还是目录?

检查符号链接目标类型的方法

当你用readdir遍历目录遇到DT_LNK类型的符号链接时,想要判断其目标是文件还是目录,可以通过以下方法实现:

  • 使用stat()系统调用:stat()会自动跟随符号链接,获取目标文件的元数据。通过返回的struct stat结构体中的st_mode字段,就能判断目标类型:

    • 用S_ISDIR(st_mode)宏判断是否为目录
    • 用S_ISREG(st_mode)宏判断是否为普通文件
    • 其他类型(如字符设备、管道等)也有对应的宏(比如S_ISCHR、S_ISFIFO)
  • 处理断链情况:如果符号链接指向的目标不存在,stat()会返回-1,此时可以通过errno判断具体错误(比如ENOENT表示目标不存在),避免程序崩溃。

  • 代码示例:

#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>

// 返回值:1=目录,0=普通文件,-1=错误,2=其他类型
int get_symlink_target_type(const char *link_path) {
    struct stat sb;
    if (stat(link_path, &sb) == -1) {
        perror("Failed to get target info");
        return -1;
    }

    if (S_ISDIR(sb.st_mode)) {
        return 1;
    } else if (S_ISREG(sb.st_mode)) {
        return 0;
    } else {
        return 2;
    }
}

在递归遍历逻辑中,当dirent->d_type == DT_LNK时,调用这个函数就能得到目标的类型,进而决定是否需要递归进入该目录。

内容的提问来源于stack exchange,提问作者merlin2011

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:36:18