readdir
函数是用于读取目录内容的函数,其定义在 <dirent.h>
头文件中。readdir
函数的原型如下:
struct dirent *readdir(DIR *dirp);
readdir
函数的返回值类型是 struct dirent *
,即指向 struct dirent
结构体的指针。
struct dirent
结构体struct dirent
结构体用于表示目录中的一个条目(文件或子目录)。其定义通常如下:
struct dirent {
ino_t d_ino; /* Inode number */
off_t d_off; /* Not used by all filesystems */
unsigned short d_reclen; /* Length of this record */
unsigned char d_type; /* Type of file */
char d_name[]; /* Null-terminated filename */
};
d_ino
: 文件或目录的 inode 号。d_off
: 目录条目的偏移量,不是所有文件系统都使用这个字段。d_reclen
: 当前目录条目的长度。d_type
: 文件类型,可以是以下值之一:
DT_REG
: 普通文件DT_DIR
: 目录DT_LNK
: 符号链接DT_BLK
: 块设备DT_CHR
: 字符设备DT_FIFO
: 管道(FIFO)DT_SOCK
: 套接字DT_UNKNOWN
: 未知类型d_name
: 文件或目录的名称,以 null 字符结尾。以下是一个简单的示例,展示如何使用 readdir
函数读取目录内容:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int main() {
DIR *dir;
struct dirent *entry;
// 打开目录
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
// 读取目录内容
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
// 关闭目录
closedir(dir);
return EXIT_SUCCESS;
}
在这个示例中,程序打开当前目录(.
),然后使用 readdir
函数读取目录中的每个条目,并打印出条目的名称。最后,程序关闭目录并退出。
readdir
函数返回的指针指向的是一个静态分配的结构体,因此在多线程环境中使用时需要注意线程安全问题。readdir
函数返回 NULL
,并且可以通过 errno
变量获取错误信息。通过理解 readdir
函数的返回值类型和 struct dirent
结构体的字段,可以更方便地处理目录内容。