readdir函数如何处理符号链接
作者:暮色微凉
时间:2026-06-28
来源:正软商城
浏览:4
readdir遍历目录时,符号链接仅返回自身名称而不解析目标。需借助readlink函数读取实际路径。将二者结合可有效区分软链接与实际文件,在文件系统处理中非常实用,通常用于文件类型判断和避免循环引用,是编程常用技巧。
本文目录
提到 readdir 函数,大家第一反应往往是“用来遍历目录里的文件”。但有一个容易被忽略的细节:当目录里出现符号链接时,readdir 返回的 d_name 字段是符号链接自身的名字,而不是它最终指向的那个文件或目录。换句话说,它只告诉你“这里有个快捷方式”,至于这个快捷方式通向哪里,它不管。

那如果想知道符号链接背后到底指向谁呢?这时候就需要 readlink 出场了。这个函数也很直接:你给它一个符号链接的路径,它就把目标路径以字符串形式返回给你。
下面这个例子,正好演示了如何把这两个函数搭配起来用——先遍历目录,遇到符号链接就读取它的目标:
#include
#include
#include
#include
int main(int argc, char *argv[]) {
DIR *dir;
struct dirent *entry;
if (argc != 2) {
fprintf(stderr, "Usage: %s \n", argv[0]);
return EXIT_FAILURE;
}
dir = opendir(argv[1]);
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_LNK) { // 检查是否为符号链接
char target_path[PATH_MAX];
ssize_t len = readlink(entry->d_name, target_path, sizeof(target_path) - 1);
if (len != -1) {
target_path[len] = '\0'; // 确保字符串以 null 结尾
printf("Symbolic link: %s -> %s\n", entry->d_name, target_path);
} else {
perror("readlink");
}
}
}
closedir(dir);
return EXIT_SUCCESS;
}
这段程序接受一个目录路径作为命令行参数,然后遍历目录中的每一个条目。遇到符号链接(通过 d_type == DT_LNK 判断),就用 readlink 解析出它的目标路径,并打印出来。看起来简单,但实际工作中,这种组合用法在处理文件系统结构时非常实用——比如备份工具、同步程序,或者任何需要区分“链接”和“实际文件”的场景。
作者最新文章
Yandex浏览器官网登录与在线体验入口
2026-11-11 09:46
打印机无法打印wps文档 排查打印设置
2026-11-08 23:23
PDF怎么按页拆成单独文件?PDF按页拆分后怎么命名
2026-11-03 18:00
长网页转PDF怎么避免断图?网页转PDF怎么设置分页
2026-11-01 09:31
夸克资源库蓝光资源每日更新经典电视剧全集
2026-10-30 11:54
上一篇:
readdir函数如何过滤特定文件
下一篇:
readdir函数如何处理权限问题
热门文章
更多
精品专题
更多
Mac软件
更多
火山引擎 网页版
Windows/ macOS/ Linux
火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。









