在 Ubuntu(Linux)下,readdir 通常是指 C 语言标准库中的 readdir() 函数,用来读取目录中的文件。下面给你一个从基础到可用的完整说明。
readdir 用于 逐个读取目录中的条目(文件/子目录)。
相关头文件:
#include <dirent.h>
函数原型:
struct dirent *readdir(DIR *dirp);
dirp:由 opendir() 打开的目录指针struct dirent 的指针NULLNULL(用 errno 判断)DIR *dir = opendir(".");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
gcc readdir_example.c -o readdir_example
./readdir_example
struct dirent {
ino_t d_ino; // inode 号
off_t d_off;
unsigned short d_reclen;
unsigned char d_type; // 文件类型
char d_name[]; // 文件名
};
if (entry->d_type == DT_DIR)
printf("目录: %s\n", entry->d_name);
else if (entry->d_type == DT_REG)
printf("普通文件: %s\n", entry->d_name);
. 和 ..readdir 会返回:
.
..
通常需要跳过:
if (strcmp(entry->d_name, ".") == 0 ||
strcmp(entry->d_name, "..") == 0)
continue;
readdir_r()(已不推荐)readdir() + 单线程或加锁不能获取:
需要配合:
stat() / lstat()
#include <sys/stat.h>
struct stat st;
stat(entry->d_name, &st);
printf("size: %ld\n", st.st_size);
Linux 没有 readdir 命令,但你可能想用:
ls
ls -l
find .
如果你愿意,可以告诉我:
我可以给你更针对性的示例。