如何检查我是否可以使用 <sys/statvfs.h>?

How do I check if I can use <sys/statvfs.h>?

我想写一个可移植的方式来获取免费磁盘space。在 Windows 上,我使用 GetDiskFreeSpaceEx,在 Linux 上,header <sys/statvfs.h> 包含我可以使用的功能 statvfs64()

我的问题是,我可以假设这个 header 在哪些系统上存在。有没有我可以检查的宏?像

#ifdef _MSC_VER
#include <windows.h>
#else
  #ifdef STATVFS_IS_AVAILABLE
  #include <sys/statvfs.h>
  #endif
#endif

通常,您会使用自动工具来处理类似的东西。 autoconf 创建一个 config.h header 定义一个 HAVE_STATVFS 左右的宏,如果你定义了一个合适的配置测试。

但是,由于 <sys/statvfs.h> 在其他方面的巨大可用性,您也可以像刚才那样简单地测试 _MSC_VER 的可移植性较低。