是否有一个 POSIX 函数可以给我一个目录(包括所有子文件夹)的大小,大致相当于“ du -s somepath”?
			
			17337 次
		
3 回答
            28        
        
		
$ 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;
}
    于 2009-01-23T12:35:34.910   回答
    
    
            2        
        
		
没有现成的功能,所以你必须自己做。您可以查看 du 的 GNU 实现的源代码作为示例(请参阅http://www.gnu.org/prep/ftp.html以获取下载位置列表)。它在coreutils包装中。
关键的 Posix 调用可能是opendir、readdir、closedir和stat。
于 2009-01-23T12:26:19.330   回答
    
    
            -2        
        
		
结果以字节为单位:
du -sb | grep -oE '^\s*[0-9]+'
    于 2018-06-12T12:09:11.983   回答