gpt4 book ai didi

c - 如何在 Linux 中以编程方式获取目录的大小?

转载 作者:IT王子 更新时间:2023-10-29 00:47:47 28 4
gpt4 key购买 nike

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

请建议我如何获得 dir 的确切大小,就像我们在“du -sh dirPath”命令后获得的一样。

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

提前致谢。

最佳答案

基于 Jim Plank 的 example让你开始:

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

int main( int argc, char **argv ) {
DIR *d = opendir( "." );

if( d == NULL ) {
fprintf( stderr, "Cannot open current working directory\n" );
return 1;
}

struct dirent *de;
struct stat buf;
int total_size = 0;

for( de = readdir( d ); de != NULL; de = readdir( d ) ) {
int exists = stat( de->d_name, &buf );

if( exists < 0 ) {
fprintf( stderr, "Cannot read file statistics for %s\n", de->d_name );
} else {
total_size += buf.st_size;
}
}

closedir( d );
printf( "%d\n", total_size );

return 0;
}

读者注意事项、注意事项和问题:

  • 这是一个不完整的例子。参见 Plank 的 notes了解更多详情。
  • 如果文件被锁定怎么办?
  • 符号链接(symbolic link)是否需要特殊处理(以避免无限循环)?
  • 如何输出错误文件的完整路径名?

这个答案是一个起点,而不是一个完整而可靠的计算目录大小的程序。如果您需要更多帮助,请阅读 du 程序的源代码。

关于c - 如何在 Linux 中以编程方式获取目录的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1129499/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com