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; } 这个示例程序会列出当前目录下的所有文件和子目录。