readdir函数如何处理符号链接
作者:暮色微凉
时间:2026-06-28
浏览:0
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 解析出它的目标路径,并打印出来。看起来简单,但实际工作中,这种组合用法在处理文件系统结构时非常实用——比如备份工具、同步程序,或者任何需要区分“链接”和“实际文件”的场景。
作者最新文章
Photoshop文字外框怎么设置?给文字加边框的实用方法
2026-09-22 16:12
白描 PDF
2026-09-16 17:44
密码键盘
2026-09-16 17:43
3dmax快捷键失效了怎么办
2026-09-16 13:53
Xiaomi 18 Fold首销数据解读:较上代大折叠增长310%的原因与配置分析
2026-09-08 16:55
上一篇:
readdir函数如何过滤特定文件
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































