쉘 명령 및 df를 제외한 디스크 공간 사용량 가져오기

쉘 명령 및 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% /

관련 정보