如何在C中获取目录的大小?
是否有一个POSIX函数可以给我一个目录(包括所有子文件夹)的大小,大致相当于“ du -s somepath
”?
$ man nftw
名称
ftw
,nftw
– 文件树走描述
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调用可能是opendir
, readdir
, closedir
和stat
。
结果以字节为单位
du -sb | grep -oE '^\s*[0-9]+'