在 Debian(以及一般的 Linux/Unix 系统)中,opendir() 可以用于打开符号链接(软链接)所指向的目录,但有一些细节需要注意。
opendir() 与符号链接的关系opendir(const char *name) 的作用是打开一个目录。name 是一个符号链接,且该链接指向一个目录,那么:
opendir() 会自动跟随(follow)符号链接name 是一个符号链接,但指向的是普通文件或不存在,则:
opendir() 会失败,errno 通常被设为 ENOTDIR 或 ENOENT#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir = opendir("/tmp/mylink"); // mylink 是指向目录的软链接
if (!dir) {
perror("opendir");
return 1;
}
// 成功,说明可以作用于链接
closedir(dir);
return 0;
}
open() 的区别open() 默认跟随符号链接open() + O_NOFOLLOWopendir() 没有“不跟随链接”的参数
lstat() 判断是否为符号链接. 和 .. 外)opendir() 与硬链接基本无关✅ Debian 下 opendir() 可以用于符号链接,只要链接指向的是目录,会自动跟随链接打开目标目录。
如果你关心的是:
readdir() 区分链接本身可以继续问,我可以给你更具体的示例。