温馨提示×

centos readdir如何获取文件大小

小樊
44
2026-09-06 07:20:38
栏目: 智能运维

在 CentOS(本质就是 Linux)上,用 readdir() 本身是不能直接拿到文件大小的readdir() 只返回目录项(struct dirent),里面只有文件名和文件类型。

要获取文件大小,常见做法有下面几种:


一、readdir + stat(最常用)

readdir 拿到文件名后,再用 stat()lstat() 获取文件信息。

示例(C 语言)

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>

int main() {
    DIR *dir = opendir(".");
    struct dirent *entry;
    struct stat st;

    while ((entry = readdir(dir)) != NULL) {
        if (stat(entry->d_name, &st) == -1)
            continue;

        printf("%s  size=%ld\n", entry->d_name, st.st_size);
    }

    closedir(dir);
    return 0;
}

说明

  • st.st_size:文件大小(字节)
  • stat():跟随符号链接
  • lstat():不跟随符号链接(看链接本身大小)

二、readdir + fstatat(推荐,更现代)

避免拼接路径,直接用目录 fd:

#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/stat.h>

DIR *dir = opendir(".");
int dfd = dirfd(dir);
struct dirent *entry;

while ((entry = readdir(dir)) != NULL) {
    struct stat st;
    fstatat(dfd, entry->d_name, &st, 0);
    printf("%s size=%ld\n", entry->d_name, st.st_size);
}

三、如果只是想“看文件大小”(非编程)

在 CentOS 命令行:

ls -l

或递归:

du -sh *

四、常见误区

readdir() 里有文件大小
readdir() 只有文件名

dirent.d_off 是文件大小
✅ 那是目录偏移量


如果你是想:

  • C / C++
  • Python
  • 或者 提高性能(减少 stat 调用)

可以告诉我,我可以给你更针对性的方案。

0