readdir()
函数是 Linux 系统中用于读取目录内容的函数。它的原型在
头文件中定义,如下所示:
#includestruct dirent *readdir(DIR *dirp);
参数
DIR *dirp
: 这是一个指向DIR
类型的指针,表示要读取的目录流。通常通过opendir()
函数打开目录并返回一个DIR
指针。
返回值
- 成功时,
readdir()
返回一个指向struct dirent
结构体的指针,该结构体包含有关目录中的一个条目的信息。 - 如果已经到达目录的末尾(即没有更多的目录条目),则返回
NULL
。 - 如果发生错误,也返回
NULL
。
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
: 管道DT_SOCK
: 套接字DT_UNKNOWN
: 未知类型
d_name
: 文件名,以 null 字符结尾。
示例代码
以下是一个简单的示例,展示如何使用 readdir()
函数读取目录内容:
#include#include #include #include 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; }
注意事项
readdir()
返回的struct dirent
结构体中的d_name
字段是一个 null 终止的字符串,可以直接使用。readdir()
函数不保证返回的顺序,除非目录中的条目是按字母顺序排列的。- 在处理大量目录条目时,应注意内存管理,避免内存泄漏。
通过这些信息,你应该能够有效地使用 readdir()
函数来读取和处理目录内容。