在Ubuntu中,readdir()
函数用于读取目录中的条目。它的原型定义在dirent.h
头文件中,如下所示:
#include <dirent.h>
struct dirent {
long d_ino; /* Inode number */
off_t d_off; /* Not used by Linux */
unsigned short d_reclen; /* Length of this record */
unsigned char d_type; /* Type of file */
char d_name[]; /* Filename */
};
readdir()
函数返回一个指向dirent
结构体的指针,该结构体包含了目录条目的信息。以下是dirent
结构体中各个字段的含义:
d_ino
:文件的inode号,用于唯一标识文件系统中的一个文件或目录。
d_off
:在某些系统上,此字段表示目录条目在目录文件中的偏移量。但在Linux上,此字段未使用。
d_reclen
:目录条目的长度(以字节为单位)。这个长度不包括结构体本身的大小和d_name
字段的长度。
d_type
:文件类型。它可以是以下值之一:
d_name
:目录条目的名称。这是一个以null字符结尾的字符串,表示文件或目录的名称。
当readdir()
函数成功读取一个目录条目时,它返回一个指向dirent
结构体的指针。如果已经到达目录的末尾,它返回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");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
这个程序将打开当前目录(.
),然后使用readdir()
函数读取目录中的所有条目,并将它们的名称打印到屏幕上。最后,它关闭目录并退出。