c– 如何在Posix系统中获得总可用磁盘空间?

c– 如何在Posix系统中获得总可用磁盘空间?,第1张

概述我正在编写一个跨平台的应用程序,我需要总的可用磁盘空间.对于posix系统(Linux和Macos),我使用的是statvfs.我创建了这个C方法:long OSSpecificPosix::getFreeDiskSpace(const char* absoluteFilePath) { struct statvfs buf; if (!sta

我正在编写一个跨平台的应用程序,我需要总的可用磁盘空间.对于posix系统(Linux和Macos),我使用的是statvfs.我创建了这个C方法:

long OsspecificPosix::getFreediskSpace(const char* absolutefilePath) {   struct statvfs buf;   if (!statvfs(absolutefilePath,&buf)) {      unsigned long blksize,blocks,freeblks,disk_size,used,free;      blksize = buf.f_bsize;      blocks = buf.f_blocks;      freeblks = buf.f_bfree;      disk_size = blocks*blksize;      free = freeblks*blksize;      used = disk_size - free;      return free;   }   else {      return -1;   }}

不幸的是,我得到了一些我无法理解的奇怪价值观.例如:
f_blocks = 73242188
f_bsize = 1048576
f_bfree = 50393643

这些值是以位,字节还是其他形式存在的?我在这里读取stackoverflow那些应该是字节,但后来我得到的总字节数是免费的:
f_bsize * f_bfree = 1048576 * 50393643
但这意味着49212.542GB ……太多了……

我是否对代码或其他任何内容做错了?
谢谢!最佳答案我不太清楚OSX是否足以预测这绝对是答案,但f_blocks和f_bfree实际上是指“基本块”或“片段”(大小为buf.f_frsize字节),而不是“文件系统块大小” (这是buf.f_bsize字节):

http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/statvfs.h.html

f_bsize只是提示I / O *** 作的首选大小,它不一定与文件系统的划分方式有关.

总结

以上是内存溢出为你收集整理的c – 如何在Posix系统中获得总可用磁盘空间?全部内容,希望文章能够帮你解决c – 如何在Posix系统中获得总可用磁盘空间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存