저는 C++ 프로그램을 작성 중이며 파티션과 hhd의 전체 공간, 여유 공간, 사용 공간을 가져와야 합니다.
시스템에서 이 데이터를 가져오는 데 사용할 수 있는 모든 명령과 코드와 출력 간의 모든 차이점이 매우 혼란스럽습니다.
나는 다음 링크를 읽었습니다.디스크 사용량을 측정하는 방법이 왜 그렇게 다양합니까?, 도움이 되었지만 실제로 내 문제를 해결하는 데는 도움이 되지 않았습니다.
와 파일 시스템의 크기와 파티션의 크기에 따라 출력 간의 크기 차이가 발생하는 이유를 이해합니다. 나에게 필요한 것들도 마찬가지다. 그러나 내가 아는 한 파티션의 전체 크기만 제공됩니다. (맞나요?) 또한 코드에서 구조체를 사용했는데 출력은 df의 출력과 매우 유사합니다. 그렇다면 파티션과 하드 드라이브의 정확한 여유 크기, 사용된 크기, 전체 크기를 얻으려면 무엇을 사용해야 합니까?lsblk
df
df
lsblk
partition's size
lsblk
statvfs
답변1
명령줄에서 다음을 사용할 수 있습니다.
lsblk -bo NAME,SIZE,FSTYPE,FSSIZE,FSUSED,FSAVAIL,FSUSE%
그러나 C++ 프로그램에서는 일반적으로 다른 명령의 출력을 구문 분석하고 싶지 않습니다. 정보를 직접 얻으려면 시스템 및 라이브러리 호출을 사용해야 합니다.
작업에 적합한 요구 사항을 찾는 것은 Stack Overflow의 영역에 가깝지만 다음은 몇 가지 팁입니다.
- 파일 시스템 용량/사용/여유 값:
statvfs(2)
또는std::filesystem::space
. - 블록 장치 크기:ioctl을 사용
BLKGETSIZE64
하여 바이트 단위의 크기를 얻거나, 블록 단위의 크기가 필요한 경우 ioctl을 사용BLKSSZGET
하여 블록 크기를 얻고 바이트 단위의 크기를 단일 블록의 크기로 나눌 수도 있습니다.또 다른 예가 있습니다.