在 CentOS(以及所有 Linux 系统)里,readdir 不是一条命令,而是一个 系统调用 / C 语言函数,用来 读取目录内容。
作用一句话:
读取一个目录里的文件或子目录项(类似
ls背后做的事)。
它是一个 POSIX 标准 API,定义在:
#include <dirent.h>
函数原型:
struct dirent *readdir(DIR *dirp);
这是最常见用法。
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
if (dir == NULL) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
编译运行:
gcc test.c -o test
./test
输出类似:
.
..
file1.txt
dir1
readdir() 返回一个指向 struct dirent 的指针。
常用成员:
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]; // 文件名
};
注意:
readdir() 不会返回完整路径NULL 表示目录读完你在终端执行的:
ls
背后大致流程是:
opendir("/path")
readdir()
readdir()
readdir()
...
closedir()
所以:
✅ ls 的核心就是 readdir
| 项目 | readdir | ls |
|---|---|---|
| 类型 | C 函数 / 系统调用 | shell 命令 |
| 使用方式 | 写程序 | 终端直接执行 |
| 是否返回完整路径 | 否 | 默认否 |
| 是否能排序 | 否 | 能 |
❌ 在 shell 里直接执行 readdir
readdir # ❌ 不存在这个命令
✅ 正确方式:
ls、findopendir()
readdir()
closedir()
rewinddir()
在 CentOS 中,
readdir是用来在 C 程序里读取目录内容的函数,是ls等命令的底层实现之一。
如果你愿意,我也可以:
你想深入哪一块?