在Ubuntu中,readdir
函数用于读取目录中的文件和子目录。它定义在dirent.h
头文件中。readdir
函数的返回值是一个指向dirent
结构体的指针,该结构体包含了目录项的信息。如果读取成功,返回的指针指向一个有效的dirent
结构体;如果到达目录末尾或者发生错误,返回NULL。
dirent
结构体定义如下:
struct dirent {
ino_t d_ino; /* Inode number */
off_t d_off; /* Not an offset; see below */
unsigned short d_reclen; /* Length of this record */
char d_name[]; /* Null-terminated filename */
};
其中,d_ino
是目录项对应的inode号,d_off
是目录项在目录文件中的偏移量,d_reclen
是整个目录项记录的长度,d_name
是目录项的文件名。
下面是一个简单的示例,展示如何使用readdir
函数读取目录中的文件和子目录:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int main(int argc, char *argv[]) {
DIR *dir;
struct dirent *entry;
if (argc != 2) {
fprintf(stderr, "Usage: %s <directory>\n", argv[0]);
return EXIT_FAILURE;
}
dir = opendir(argv[1]);
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return EXIT_SUCCESS;
}
编译并运行此程序,传入一个目录作为参数,程序将输出该目录下的所有文件和子目录。注意,这个示例程序没有处理.
和..
这两个特殊的目录项。在实际应用中,你可能需要根据需要过滤掉这两个目录项。