在 Debian(以及其它 Linux 发行版)里,readdir 通常指的是 C 语言中的 readdir() 函数,用于读取目录内容。下面从「是什么、怎么用、示例、常见问题」几个方面说明。
readdir() 是 POSIX 标准提供的目录读取函数,定义在:
#include <dirent.h>
函数原型:
struct dirent *readdir(DIR *dirp);
DIR *dirp:由 opendir() 打开的目录流struct dirent 的指针NULLopendir() // 打开目录
↓
readdir() // 循环读取目录项
↓
closedir() // 关闭目录
#include <stdio.h>
#include <dirent.h>
int main(void) {
DIR *dir;
struct dirent *entry;
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
gcc readdir_example.c -o readdir_example
./readdir_example
struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型
char d_name[]; // 文件名
};
if (entry->d_type == DT_DIR) {
printf("%s 是目录\n", entry->d_name);
}
常见类型:
DT_REG:普通文件DT_DIR:目录DT_LNK:符号链接. 和 ..if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
readdir() 不是线程安全的。
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
不过在较新 glibc 中,readdir_r 已被标记为废弃,推荐:
readdirscandir| 函数 | 说明 |
|---|---|
opendir |
打开目录 |
readdir |
读取一项 |
closedir |
关闭目录 |
scandir |
读取并排序/过滤 |
telldir / seekdir |
定位目录位置 |
Debian 没有 readdir 命令,它是系统调用 / C 函数。
如果你只是想列目录:
ls
ls -a
如果你愿意,可以告诉我:
我可以直接给你对应示例。