리눅스에서 프로그래밍을 하다보면 하드디스크 용량을 알아오는 등의 일을 해야할 경우가 있다. 특히 대용량 데이터를 저장하는 경우 더욱더 하드의 잔여 공간은 중요한 요소가 된다. 

     

      필자의 경우에도 SFPDP관련 프로젝트를 진행할 때, 해당 데이터를 저장하기 위한 공간에대한 모니터링을 했어야 했는데, 이때 사용한 기능이다. 

     

    자료의 출처 : embeddedclub.net

     

    1. 소스코드

      소스코드는 아래와 같다. 리눅스에서 사용하는 가상 파일시스템인 vfs의 정보를 확인하기 위해서 statvfs 헤더를 추가하고 난 다음 사용자로 부터 받은 디렉터리가 포함된 디스크의 정보를 읽어온다. 그리고 전체용량(Total)에서 남은 용량(free)를 제외하면 사용한 용량이 되니 각각 출력한다.

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/statvfs.h>
    #include <sys/types.h>
    #include <errno.h>
     
    #define KB 1024
    #define MB (KB*KB)
    #define GB (MB*KB)
     
    void printf_state(struct statvfs *buff);
     
    int main(int argc, char** argv) {
     
        if(argc!=2) {
            printf("Illegal Option!\n");
            return -1;
        }
     
        struct statvfs * buff;
     
        if(!(buff = (struct statvfs *)malloc(sizeof(struct statvfs)))) {
                    perror ("Failed to allocate memory to buffer.");
        }
     
        if (statvfs(argv[1], buff) < 0) {
            printf("statvfs() has failed.\n");
        } else {
            #if DEBUG
            print_state(buff);
            #endif
     
            // Result 
            printf("Block Size : %ld\n",buff->f_bsize);
            printf("Total Size : %ld\n",(buff->f_blocks)*buff->f_bsize/KB);
            printf("Free  Size : %ld\n",(buff->f_bfree)*buff->f_bsize/KB);
            printf("Used  Size : %ld\n",(buff->f_blocks - buff->f_bfree)*buff->f_bsize/KB);
        }
     
        free(buff);
     
        return 0;
    }

     

    2. 출력 결과는 다음과 같다. 

     

      리눅스에서 사용하는 모든 애플리케이션에서 사용할 수 있으니, 향후 모니터링 관련 앱을 만들때 알아두면 유용하게 사용할 수 있다. 

     

    # statvfs 예제... 끝.

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기