在 CentOS(以及一般的 Linux 系统) 中,readdir 是一个 C 语言标准库函数,用于 读取目录中的内容。它属于 POSIX 标准,定义在 <dirent.h> 头文件中。
readdir 用于 逐个读取一个已打开目录中的目录项(文件/子目录)。
它通常和以下函数配合使用:
opendir():打开目录readdir():读取目录项closedir():关闭目录#include <dirent.h>
struct dirent *readdir(DIR *dirp);
dirp:由 opendir() 返回的目录流指针struct dirent 的指针NULLstruct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 偏移量
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型
char d_name[256]; // 文件名
};
在 CentOS / Linux 上:
d_name 是最常用的字段(文件名)d_type 可判断是文件、目录、符号链接等#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir("/tmp");
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
会包含 . 和 ..
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
不是线程安全的
readdir_r()(已不推荐)readdir() + 本地变量只返回文件名,不含路径
| 函数 | 说明 |
|---|---|
opendir |
打开目录 |
readdir |
读取一个目录项 |
closedir |
关闭目录 |
scandir |
一次性读取并排序 |
getdents |
更底层的系统调用 |
如果你是想问:
可以告诉我,我可以具体展开。