在Linux中,readdir
和stat
是两个常用的系统调用,分别用于读取目录内容和获取文件/目录的元数据
opendir
函数打开一个目录:DIR *dir = opendir("directory_path");
if (!dir) {
perror("opendir");
return 1;
}
readdir
函数逐个读取目录中的条目(文件和子目录):struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
// 处理每个目录条目
}
stat
函数获取其元数据:struct stat file_stat;
if (stat(entry->d_name, &file_stat) == -1) {
perror("stat");
continue;
}
file_stat
结构体中的成员变量来获取文件/目录的各种信息,例如:file_stat.st_mode
:文件类型和权限file_stat.st_nlink
:文件链接数file_stat.st_uid
:文件所有者IDfile_stat.st_gid
:文件所属组IDfile_stat.st_size
:文件大小(字节)file_stat.st_mtime
:文件最后修改时间(秒)file_stat.st_ctime
:文件状态更改时间(秒)下面是一个完整的示例程序,演示了如何将readdir
和stat
配合使用:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
int main() {
DIR *dir = opendir("directory_path");
if (!dir) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
struct stat file_stat;
if (stat(entry->d_name, &file_stat) == -1) {
perror("stat");
continue;
}
printf("Filename: %s\n", entry->d_name);
printf("Size: %ld bytes\n", (long)file_stat.st_size);
printf("Last modified: %s", ctime(&file_stat.st_mtime));
printf("\n");
}
closedir(dir);
return 0;
}
将directory_path
替换为你要读取的目录路径,然后编译并运行程序。它将显示目录中每个文件和子目录的名称、大小和最后修改时间。