是的,Linux中的opendir()
函数支持符号链接(symlink)
当你使用opendir()
打开一个符号链接时,它将返回一个指向该符号链接的目录流。你可以使用dirent_t
结构体中的d_type
字段来检查目录项是否为符号链接。如果d_type
字段的值为DT_LNK
,则表示该目录项是一个符号链接。
以下是一个简单的示例:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
int main() {
DIR *dir;
struct dirent *entry;
const char *dir_path = "/path/to/directory";
dir = opendir(dir_path);
if (dir == NULL) {
perror("Failed to open directory");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dir)) != NULL) {
struct stat statbuf;
if (lstat(entry->d_name, &statbuf) == -1) {
perror("Failed to get file status");
continue;
}
if (S_ISLNK(statbuf.st_mode)) {
printf("Symbolic link: %s\n", entry->d_name);
} else {
printf("Regular file: %s\n", entry->d_name);
}
}
closedir(dir);
return 0;
}
在这个示例中,我们首先使用opendir()
打开一个目录,然后使用readdir()
逐个读取目录项。对于每个目录项,我们使用lstat()
获取其状态信息,并使用S_ISLNK()
宏检查它是否为符号链接。如果是符号链接,我们打印出它的名称。