如何在C中获取目录的大小?

是否有一个POSIX函数可以给我一个目录(包括所有子文件夹)的大小,大致相当于“ du -s somepath ”?

 $ man nftw 

名称

ftwnftw – 文件树走

描述

ftw()遍历目录dirpath下的目录树,并为树中的每个条目调用fn()一次。 默认情况下,目录在它们包含的文件和子目录之前处理(预订遍历)。

符合

POSIX.1-2001,SVr4,SUSv1。

简单的例子

 #include  #include  #include  #include  #include  static unsigned int total = 0; int sum(const char *fpath, const struct stat *sb, int typeflag) { total += sb->st_size; return 0; } int main(int argc, char **argv) { if (!argv[1] || access(argv[1], R_OK)) { return 1; } if (ftw(argv[1], &sum, 1)) { perror("ftw"); return 2; } printf("%s: %u\n", argv[1], total); return 0; } 

没有现成的function,所以你必须自己做。 您可以查看du的GNU实现的源代码作为示例(有关要下载的位置列表,请参阅http://www.gnu.org/prep/ftp.html )。 它在coreutils包中。

关键的Posix调用可能是opendirreaddirclosedirstat

结果以字节为单位

 du -sb | grep -oE '^\s*[0-9]+'