readdir 是一个在 Linux 系统中用于读取目录内容的函数。它是 POSIX 标准的一部分,因此在大多数 Unix-like 系统(包括 Linux)上都可以使用。readdir 函数通常用于遍历目录中的文件和子目录。
readdir 函数的原型如下:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
参数说明:
dirp:一个指向 DIR 类型的指针,该指针表示要读取的目录。通常通过 opendir 函数打开目录并返回一个 DIR 指针。返回值:
readdir 返回一个指向 struct dirent 结构的指针,该结构包含有关目录中的一个条目的信息(例如文件名、inode 号等)。readdir 返回 NULL。struct dirent 结构的定义如下:
struct dirent {
ino_t d_ino; /* Inode number */
off_t d_off; /* Not used by all filesystems; offset to the next dirent */
unsigned short d_reclen; /* Length of this dirent */
unsigned char d_type; /* Type of file; see below */
char d_name[]; /* Null-terminated filename */
};
d_type 字段表示文件类型,可以是以下值之一:
DT_REG:常规文件DT_DIR:目录DT_LNK:符号链接使用 readdir 函数遍历目录的基本步骤如下:
opendir 函数打开目录并获取一个 DIR 指针。readdir 函数读取目录中的每个条目,直到返回 NULL。struct dirent 结构中的信息(例如打印文件名)。closedir 函数关闭目录。示例代码:
#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
int main() {
DIR *dir;
struct dirent *entry;
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
这个示例程序会列出当前目录下的所有文件和子目录。