Linux statvfs()获取系统磁盘信息

您所在的位置:网站首页 linux分区挂载计算剩余磁盘空间容量 Linux statvfs()获取系统磁盘信息

Linux statvfs()获取系统磁盘信息

2024-07-10 03:00| 来源: 网络整理| 查看: 265

目录获取磁盘信息方式statvfs, fstatvfs 函数说明示例:求磁盘剩余空间

获取磁盘信息方式

Linux中,可以在终端用df -h,fdisk -l等命令,查看磁盘信息,但C/C++程序中,如何查看呢? 可以使用statvfs, fstatvfs调用。

statvfs, fstatvfs 函数说明

有2个接口能获取磁盘信息方式,statvfs需要传入一个C风格Posix路径;fstatvfs需要一个打开的文件描述符。

#include int statvfs(const char *path, struct statvfs *buf); int fstatvfs(int fd, struct statvfs *buf);

参数说明:

path 要获取磁盘信息的路径,只要是挂载到操作文件系统的路径即可。 fd 是已打开文件描述符,代表要获取磁盘信息的文件。 buf 指向一个statvfs结构,定义如下: 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; /* Number of free blocks 空闲块数量 */ fsblkcnt_t f_bavail; /* Number of free blocks for unprivileged users 非特权用户的空闲块数量 */ fsfilcnt_t f_files; /* Number of inodes i节点数量 */ fsfilcnt_t f_ffree; /* Number of free inodes 空闲i节点数量 */ fsfilcnt_t f_favail; /* Number of free inodes for unprivileged users 非特权用户的空闲i节点数量 */ unsigned long f_fsid; /* Filesystem ID 文件系统id */ unsigned long f_flag; /* Mount flags 挂载标识 */ unsigned long f_namemax; /* Maximum filename length 最大文件名长度 */ };

f_flag是bit位掩码的,表示当挂载到该文件系统时的各种选项。包含以下几个选项:

ST_MANDLOCK 文件系统上允许强制锁。 ST_NOATIME 不更新访问时间。 ST_NODEV 不允许访问设备特殊文件。 ST_NODIRATIME 不更新目录访问时间。 ST_NOEXEC 不允许找文件系统上执行程序。 ST_NOSUID 对于文件系统上的可执行文件,exec加载器忽略set-user-ID 和 set-group-ID bit位。 ST_RDONLY 文件系统挂载为只读。 ST_RELATIME 更新访问时间,参考mtime/ctime。 ST_SYNCHRONOUS 写立即同步到文件系统,参见open的O_SYNC选项。

返回值: 成功返回0;失败返回-1,errno被设置。

示例:求磁盘剩余空间

假设现在我们想得到磁盘剩余空间,该如何获取? 前面提到,可以通过statvfs得到磁盘的空闲块数量(f_bfree),以及每个空闲块大小(f_bsize)。

#include #include #include #include using namespace std; int printFreeSpace(const char *path) { struct statvfs st; if (::statvfs(path, &st) != 0) { printf("statvfs error: %s\n", strerror(errno)); return -1; } auto freeSize = st.f_bsize * st.f_bfree; printf("current free space of path %s: %lu byte\n", path, freeSize); return 0; } int main() { printFreeSpace("/"); return 0; }

在我的电脑上运行结果:

current free space of path /: 125865598976 byte

125865598976 byte约117GB,跟实际情况相符。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3