如何或从哪里df
获取其信息?
我正在编写一个 C 程序,我想知道根/
文件系统的大小、使用的数量以及可用的数量或百分比。
通常任何人都会这样做
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdc2 550G 168G 355G 33% /
udev 253G 216K 253G 1% /dev
tmpfs 253G 1.9M 253G 1% /dev/shm
/dev/sdc1 195M 13M 183M 7% /boot/efi
/dev/sda1 5.0T 4.9T 26G 100% /data
/dev/sdb1 559G 286G 273G 52% /scratch
我只需要 的值/
。目前在CI做
system("df -h > somefile.txt");
fp = fopen( somefile.txt, "r");
/* read contents of file and parse out root file system values */
这是一个问题,因为该df
命令并不总是有效,有时它会无限期地挂起,从而导致我的 C 程序挂起。
下是否有某个文件/proc
或/sys
包含尺寸,用过的, 和使用%信息?除了获取这些信息还有其他方法吗df
?
答案1
int statfs(const char *path, struct statfs *buf); int fstatfs(int fd, struct statfs *buf);
描述 函数 statfs() 返回有关已安装文件系统的信息。 path 是已安装文件系统中任何文件的路径名。 buf 是一个指向 statfs 结构的指针,其定义大致如下:
struct statfs { long f_type; type of file system (see below) long f_bsize; optimal transfer block size long f_blocks; total data blocks in file system long f_bfree; free blocks in fs long f_bavail; free blocks avail to non-superuser long f_files; total file nodes in file system long f_ffree; free file nodes in fs fsid_t f_fsid; file system id
#include <stdio.h>
#include <stdlib.h>
#include <sys/statfs.h>
int main ( int argc, char *argv[] )
{
char path[80];
struct statfs buffer;
int n;
long int block_size;
long int total_bytes;
long int free_bytes;
double total_gb;
sprintf( path, "/bin/pwd" ); /* this file should always exist */
n = statfs( path, &buffer );
block_size = buffer.f_blocks;
total_bytes = buffer.f_bsize * block_size;
total_gb = total_bytes / 1024.0 / 1024.0 / 1024.0;
printf("total gb = %lf\n", total_gb );
return 0;
}
总 GB = 549.952682
我的 df -h 的输出
Filesystem Size Used Avail Use% Mounted on /dev/sdc2 550G 168G 355G 33% /