在 Linux 中,readdir 通常指 POSIX 标准库函数 readdir(),用来读取目录中的条目。下面分几点说明它“返回什么内容”。
readdir 函数原型#include <dirent.h>
struct dirent *readdir(DIR *dirp);
DIR *dirp —— 由 opendir() 返回的目录流指针struct dirent 的指针NULLNULL,并设置 errnostruct direntreaddir 返回的是一个 struct dirent 结构体(具体字段可能因系统略有不同,但常见如下):
struct dirent {
ino_t d_ino; // inode 号
off_t d_off; // 下一个条目的偏移量(Linux 特有)
unsigned short d_reclen; // 记录长度
unsigned char d_type; // 文件类型(Linux 特有)
char d_name[256]; // 文件名(以 '\0' 结尾)
};
d_name:最重要,文件名(不含路径)d_ino:文件的 inode 号d_type:文件类型(可选值见下)d_off / d_reclen:底层实现相关,一般不用d_type 常见取值DT_REG 普通文件
DT_DIR 目录
DT_LNK 符号链接
DT_CHR 字符设备
DT_BLK 块设备
DT_FIFO 管道
DT_SOCK socket
DT_UNKNOWN 未知
注意:
d_type不是所有文件系统都支持,某些情况下会是DT_UNKNOWN
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("name: %s, type: %d\n", entry->d_name, entry->d_type);
}
closedir(dir);
return 0;
}
readdir 返回的是静态缓冲区指针,不能跨调用保存
readdir 会覆盖内容readdir_r(已逐渐废弃)readdir 在多数实现中已是线程安全(配合不同 DIR*)
readdir返回的是目录中一个条目的元信息(主要是文件名和类型),以struct dirent *形式给出,到目录末尾或出错时返回NULL。
如果你问的是 系统调用 getdents / getdents64,或者 Shell 中的 readdir 概念,也可以继续问。