C Linux 检查 mount 中的 free space

C Linux Check free space in mount

当我 运行 df -h 我可以看到在 /dev 我使用 6M 并且大小是 40M ,可用大小是 34M 。

如何使用 C 代码获取此信息?

你检查过source of df from Coreutils了吗?

它在 Linux 以及其他类似 POSIX 的系统上使用 sys/statvfs.h 中的 statvfs()

来自here

使用 statvfs API:

// header for statvfs
#include <sys/statvfs.h>

statvfs的原型是

int statvfs(const char *path, struct statvfs *buf);

结果会填充到buf statvfs struct:

struct statvfs {
    unsigned long  f_bsize;    /* filesystem block size */
    unsigned long  f_frsize;   /* fragment size */
    fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */
    fsblkcnt_t     f_bfree;    /* # free blocks */
    fsblkcnt_t     f_bavail;   /* # free blocks for unprivileged users */
    fsfilcnt_t     f_files;    /* # inodes */
    fsfilcnt_t     f_ffree;    /* # free inodes */
    fsfilcnt_t     f_favail;   /* # free inodes for unprivileged users */
    unsigned long  f_fsid;     /* filesystem ID */
    unsigned long  f_flag;     /* mount flags */
    unsigned long  f_namemax;  /* maximum filename length */
};

return类型是:

On success, zero is returned. On error, -1 is returned, and errno is set appropriately.

另请查看 statvfs 命令的 man3 联机帮助页以获取更多详细信息。