在 Debian(Linux)下,readdir 通常指 POSIX 的 readdir() 函数,用于读取目录内容。下面按常见场景给你说明。
readdir(最常见)#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
int main() {
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.c -o readdir
./readdir
struct dirent 常用字段struct dirent {
ino_t d_ino; // inode 号
off_t d_off;
unsigned short d_reclen;
unsigned char d_type; // 文件类型
char d_name[256]; // 文件名
};
if (entry->d_type == DT_REG) {
printf("普通文件: %s\n", entry->d_name);
} else if (entry->d_type == DT_DIR) {
printf("目录: %s\n", entry->d_name);
}
⚠️ 注意:d_type 在某些文件系统(如 NFS)上可能为 DT_UNKNOWN
. 和 ..if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
如果你需要文件大小、权限等,建议配合 stat():
#include <sys/stat.h>
struct stat st;
stat(entry->d_name, &st);
如果你不是写 C 程序,而是想在 Debian 下列出文件:
ls
ls -l
或者:
for f in *; do
echo "$f"
done
❌ readdir 不能直接获取文件内容
✅ 它只能获取目录项(文件名 + 类型)
如果你是想:
可以直接告诉我,我给你对应示例。