是否有一种POSIX函数可以给我一个目录的大小(包括所有子文件夹),大致相当于“du -s somepath
”?
$ man nftw
名称
ftw
,nftw
- 文件树遍历描述
ftw()
遍历位于目录路径(dirpath)下的文件树,并为树中的每个条目调用fn()
一次。默认情况下,处理包含在目录中的文件和子目录之前的目录(先序遍历)。符合标准
POSIX.1-2001、SVr4、SUSv1。
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
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;
}
coreutils
软件包中。opendir
、readdir
、closedir
和stat
。以字节为单位的结果:
du -sb | grep -oE '^\s*[0-9]+'