在Ubuntu中,readdir
函数用于读取目录中的条目。它的原型定义在dirent.h
头文件中,如下所示:
#include <dirent.h>
struct 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
: 文件类型,可以是以下值之一:
d_name
: 文件名,是一个以空字符结尾的字符串。使用readdir
函数时,通常会在一个循环中调用它,直到返回NULL为止。每次调用都会返回下一个目录条目的信息。下面是一个简单的示例:
#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");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
这段代码会列出当前目录下的所有文件和子目录。