在 CentOS(以及所有 Linux 系统)中,readdir 并不是一条命令,而是 C 语言标准库函数,用于读取目录内容。下面从 原理、示例、编译、常见用法 几个方面说明。
一、readdir 是什么?
readdir 是 POSIX 标准 API,定义在:
#include
用于遍历一个目录中的文件和子目录。
函数原型:
struct dirent *readdir(DIR *dirp);
返回值:
- 成功:返回
struct dirent * - 失败 / 读到目录尾:返回
NULL
二、基本使用示例(C 语言)
示例:列出指定目录下的所有文件
#include
#include
int main(int argc, char *argv[])
{
DIR *dir;
struct dirent *entry;
if (argc < 2) {
printf("用法: %s \n", argv[0]);
return 1;
}
dir = opendir(argv[1]);
if (dir == NULL) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
三、在 CentOS 上编译运行
1️⃣ 安装编译环境(如果没有)
sudo yum install -y gcc
2️⃣ 编译
gcc readdir.c -o readdir
3️⃣ 运行
./readdir /etc
输出示例:
.
..
passwd
hosts
fstab
...
四、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]; // 文件名
};
⚠️ d_type 不是所有文件系统都支持。
五、过滤 . 和 ..
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
六、常见错误
❌ 忘记关闭目录
- 会导致 文件描述符泄漏
✅ 正确做法:
closedir(dir);
七、readdir_r(已废弃)
旧代码中常见 readdir_r,但不推荐使用(线程安全也不保证更好):
// 不推荐
readdir_r(dir, &entry, &result);
八、如果你是在问「CentOS 命令」
CentOS 中没有 readdir 命令,但等价命令有:
ls
tree
find
例如:
ls /etc
find /etc -maxdepth 1
九、总结
✅ 在 CentOS 中实现 readdir:
- 本质是 C 语言 API
- 使用
opendir / readdir / closedir - 编译用
gcc - 用于遍历目录内容
如果你是想:
- ✅ 用 Shell 脚本实现
- ✅ 用 Python / Go / Rust
- ✅ 做 文件监听或递归遍历
- ✅ 或问 内核层 readdir 实现
可以直接告诉我,我可以继续深入。
