获取除 shell 命令和 df 之外的磁盘空间使用情况

获取除 shell 命令和 df 之外的磁盘空间使用情况

如何或从哪里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% /

相关内容