在 CentOS(以及所有 Linux) 里,readdir 不是 shell 命令,而是 C 语言标准库函数,用来读取目录内容。下面分几种常见用法给你说明。
readdir 定义在:
#include <dirent.h>
用于 遍历目录中的文件和子目录。
#include <stdio.h>
#include <dirent.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 {
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("普通文件\n");
} else if (entry->d_type == DT_DIR) {
printf("目录\n");
}
⚠️ 注意:
d_type 不是所有文件系统都支持(如某些 NFS)❌ 不能直接在 shell 里用
readdir /tmp # 错误
✅ 正确方式:
如果你只是想“读目录”,不一定非要用 readdir:
ls
ls -l
find .
. 和 ..if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
readdir ✅ 推荐(线程安全情况良好)readdir_r ❌ 已废弃| 需求 | 建议 |
|---|---|
| 遍历目录 | readdir |
| 判断文件类型 | stat() |
| 递归遍历 | readdir + stat + 递归 |
| shell 脚本 | for f in * |
如果你愿意,可以告诉我:
我可以直接给你完整可用代码。