我想通过C程序获取linux中特定目录的确切大小。
我尝试使用statfs(path,struct statfs&),但没有给出确切的大小。
我也尝试了stat(),但是对于任何目录它都返回4096的大小!

请向我建议获取dir确切大小的方法,就像我们在“du -sh dirPath”命令之后得到的一样。

我也不想通过system()使用du。

提前致谢。

最佳答案

典型解决方案

如果您想要目录的大小(类似于du的形式),请创建一个递归函数。可以迭代解决问题,但是该解决方案适合于递归。

信息

这是一个让您入门的链接:

http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Prsize/lecture.html

搜索

Search Google with 'stat c program recursive directory size'

示例

直接从Jim Plank的网站开始,充当an example入门。

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

main()
{
  DIR *d;
  struct dirent *de;
  struct stat buf;
  int exists;
  int total_size;

  d = opendir(".");
  if (d == NULL) {
    perror("prsize");
    exit(1);
  }

  total_size = 0;

  for (de = readdir(d); de != NULL; de = readdir(d)) {
    exists = stat(de->d_name, &buf);
    if (exists < 0) {
      fprintf(stderr, "Couldn't stat %s\n", de->d_name);
    } else {
      total_size += buf.st_size;
    }
  }
  closedir(d);
  printf("%d\n", total_size);
}

07-28 04:06
查看更多