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 联机帮助页以获取更多详细信息。
当我 运行 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 联机帮助页以获取更多详细信息。