在 Debian(以及大多数 Linux 发行版)中,readdir 是 POSIX 标准 C 库函数,用于读取目录内容。它通常和 opendir / closedir 一起使用。
下面分几种常见情况说明 如何调用 readdir。
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <stdio.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
| 函数 | 作用 |
|---|---|
opendir() |
打开目录,返回 DIR* |
readdir() |
读取目录项 |
closedir() |
关闭目录 |
readdir_r() |
已废弃(线程安全版本) |
struct dirent {
ino_t d_ino; // inode 号
off_t d_off;
unsigned short d_reclen;
unsigned char d_type; // 文件类型(DT_REG / DT_DIR 等)
char d_name[256]; // 文件名
};
⚠️ 注意:
d_type 不是所有文件系统都支持lstat() 判断文件类型. 和 ..if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
man readdir
man opendir
man closedir
如果提示没有 man 页:
sudo apt install man manpages manpages-dev
虽然 readdir 是 C 函数,但 Shell 中可读目录:
ls
或:
for f in *; do
echo "$f"
done
❌ readdir 不是系统调用
getdents❌ readdir 返回的是静态指针
readdir 调用保存 struct dirent如果你需要:
告诉我,我可以继续讲。