在Ubuntu中,readdir
函数用于读取目录中的条目。它的原型定义在dirent.h
头文件中,如下所示:
#includestruct dirent { long d_ino; // inode号 off_t d_off; // 偏移量 unsigned short d_reclen; // 名称长度 unsigned char d_type; // 文件类型 char d_name[]; // 文件名 };
readdir
函数返回一个指向dirent
结构体的指针,该结构体包含了目录条目的信息。如果读取成功,返回的指针指向一个有效的dirent
结构体;如果到达目录末尾或者发生错误,返回NULL。
dirent
结构体中的字段含义如下:
d_ino
: 文件的inode号,用于唯一标识文件系统中的一个文件或目录。d_off
: 条目在目录文件中的偏移量,用于下次调用readdir
时从该位置继续读取。d_reclen
: 目录条目名称的长度,不包括空字符终止符和d_name字段本身。d_type
: 文件类型,可以是以下值之一:- DT_REG: 普通文件
- DT_DIR: 目录
- DT_LNK: 符号链接
- DT_BLK: 块设备文件
- DT_CHR: 字符设备文件
- DT_FIFO: 管道(FIFO)
- DT_SOCK: 套接字
- DT_UNKNOWN: 未知类型
d_name
: 文件名,是一个以空字符结尾的字符串。
使用readdir
函数时,通常会在一个循环中调用它,直到返回NULL为止。每次调用都会返回下一个目录条目的信息。下面是一个简单的示例:
#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; }
这段代码会列出当前目录下的所有文件和子目录。